我有两个类,例如 A 和 B。我想将 A 作为对 B 的引用。
class I
{
public:
virtual void callback() = 0;
};
class B
{
public:
B(I* callback) : _callback(callback) {}
private:
I* _callback;
};
class A : public I
{
public:
A() : _b(new B(this)) {}
private:
B* _b;
};
我想:
- 摆脱裸指针(例如,借助 std::shared_ptr 和 std::weak_ptr)。
- 避免循环引用。
但是有一些问题:
- 如何在 A 类中创建弱指针?首先,我应该确定 A 的一个实例是由一些 shared_ptr 管理的。即使我很确定,我怎样才能找到这个 shared_ptr 实例?
- 一般来说,我怎样才能确保我只通过共享指针使用某个类的实例?我可以尝试创建工厂方法并将构造函数设为私有,但这会导致错误:make_shared 需要公共构造函数。
提前致谢!
编辑:
问题的更详细解释:我有一个类 A。这个类想要将部分工作传递给类 B。所以我在 A 中有一个指向 B 的共享指针。我希望 B 异步执行此操作,而 B 应该当有一些进展或工作完成时调用 A 的回调。所以 B 应该有 A 的引用。
class I
{
public:
virtual void isDone() = 0;
};
class B
{
public:
B(I* callback) : _callback(callback) //how do I take and store callback inside B???
{
//async invocation of run()
}
private:
weak_ptr<I> _callback;
void run()
{
if(_callback.get())
{
_callback->isDone();
}
}
};
class A : public I
{
public:
A() : _b(new B(this)) {} //how do I pass this to B???
private:
shared_ptr<B> _b;
virtual void isDone()
{
cout << "job is complete" << '\n';
}
};
所以问题是:我如何将 A 传递给 B?我可以尝试通过裸指针或引用来做到这一点,但它是安全的,因为 B 不能保证这个引用的对象仍然存在(所有裸指针的常见问题)。所以我想传递一个弱指针,我的问题就是关于它。