【发布时间】:2021-06-23 15:12:01
【问题描述】:
我对 C++ 不是很精通。所以我会尽可能清楚地解释我的问题,当你回答时,请做一些解释。
所以我的问题涉及 2 个类(A 和 B)以及我无法访问的框架中的另一个类。 A 有一个指向 B 的指针,B 有一个指向 A 的指针(原始指针)。下面展示了 2 个类之间的交互。
class A {
public:
void method(){
this->b_ = new B(this);
SomeServiceClass::doSomething(std::unique_ptr<B>(this->b_));
}
private:
B *b_;
}
class B {
public:
B(A *a){
this->a_ = a;
}
someOtherMethod(){
}
private:
A *a;
}
所以真正发生的是,A 首先创建,在 A 的 method() 中,我创建 B 并将 B 作为 unique_ptr 传递给在另一个框架类中实现的其他方法(我没有t 有权访问)。这样我就可以将 B 的所有权转移给另一个班级。但是在 A 的生命周期中,我想访问 B 的其他方法。这就是为什么我在 A 类中保留一个指向 B 的原始指针。(我本可以使用 shared_ptr,但 SomeServiceClass::doSomething 需要 unique_ptr)。但我的问题是在 A 被摧毁的时候。我应该覆盖 A 的析构函数并分配 this->b_ = null 吗?或者也许删除?提前致谢
【问题讨论】:
-
B::_a拥有A的实例吗?如果是,则将其删除(在 B 的析构函数中)。如果没有,那就不要。如果不知道,我们无法帮助您,因为这是一个设计问题。 -
去掉A中的
B *b_;。请求SomeServiceClass获取你可以使用的B*。
标签: c++ c++11 destructor unique-ptr member-function-pointers