我浏览了一个替代使用这么多shared_ptrs,发现在评论部分中一个很好的答复:如何使用引用,避免头文件膨胀,并延迟初始化?
你真的需要共享所有权? 如果你停下来想几分钟,我相信你可以确定一个物体的一个 所有者,以及一个 的用户,它只会在所有者的生命周期中使用 。所以 只是使其成为所有者的本地/成员对象 ,并将需要使用它的那些参考传递给 。
我很想做到这一点,但问题变为拥有对象的定义现在需要首先完全定义拥有对象。例如,假设在FooManager.h我有以下几点:
class Foo;
class FooManager
{
shared_ptr<Foo> foo;
shared_ptr<Foo> getFoo() { return foo; }
};
现在,考虑上述建议,FooManager.h变为:
#include "Foo.h"
class FooManager
{
Foo foo;
Foo& getFoo() { return foo; }
};
我有这两个问题。首先,FooManager.h不再是轻量级的。包含它的每个cpp文件现在也需要编译Foo.h。其次,当foo被初始化时,我不再选择。它必须必须与FooManager同时初始化。我如何解决这些问题?
我想补充一点,在这种情况下,auto_ptr具有灵活性和简单性的最佳组合,因为他不再需要引用计数功能。 – 2010-03-25 02:19:47
由于“有点奇怪”的复制语义,是不是很好地理解了auto_ptr难以正确使用? – 2010-03-25 03:13:14