我有两个类,例如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;
};
我想:
但是有一些问题:
提前致谢!
修改
问题的更详细解释:我有一个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不能保证这个引用的对象仍然存活(所有裸指针的常见问题)。所以我想通过一个弱指针,我的问题就是它。
答案 0 :(得分:1)
第一个问题可以通过std::enable_shared_from_this来解决,它允许您从A类中安全地创建共享指针实例。
第二个问题可以通过使用属于类A
的静态工厂方法而不是像这样使用std :: make_shared来解决:
static std::shared_ptr<A> create() {
return std::shared_ptr<A>(new A());
}
然后,您可以将A
的构造函数设为私有。