考虑以下情况:
typedef boost::shared_ptr<B> BPtr;
class A
{
public:
A() { b_ptr = BPtr(new B); }
void a_func() { C::c_func(b_ptr); }
private:
BPtr b_ptr;
}
class B
{
public:
B() { b_ptr = BPtr(this); }
void b_func() { C::c_func(b_ptr); }
private:
BPtr b_ptr;
}
class C
{
public:
static void c_func(BPtr b_ptr) { /*...*/ }
}
可以用 实例化 shared_ptrthis
吗?
可以让两个 shared_ptr 对象指向同一个对象吗?(例如 A::b_ptr 和 B::b_ptr)
如果这两个之一超出范围 - B 的实例会被删除吗?
我猜我在做一些根本错误的事情。
我还考虑过使用 b_ptr 的依赖注入到 B 的构造函数,但这似乎也很错误。
更新:
澄清 - A 和 B 都需要使用 C::c_func。反过来,经过一些处理后,C 需要在 B 中调用我上面没有指定的回调函数。实际上有两种情况很有趣:
- 如果要求 C 不是有状态的 - 那么它需要像上面的代码一样从 A 和 B 接收 BPtr。
- 如果 C 是有状态的并且 A 和 B 都实例化了单独的 C 实例,则在 C 的 ctor 中给出一个 BPtr。