【发布时间】:2010-03-25 02:01:35
【问题描述】:
我正在浏览使用这么多 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 同时初始化。我该如何解决这些问题?
【问题讨论】:
标签: c++ initialization reference header-files smart-pointers