我正在浏览使用这么多 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 同时初始化。我该如何解决这些问题?