gpt4 book ai didi

c++ - 在另一个对象的析构函数中调用一个被销毁对象的成员函数是否可以?

转载 作者:太空宇宙 更新时间:2023-11-04 15:52:02 25 4
gpt4 key购买 nike

更具体地说:

class B;
class A
{
public:
A(B &b) : _b(b) { }
~A() { _b.do_something(); }

private:
B &_b;
};

class B
{
public:
B() { }

/** other methods */

~B()
{
for (std::list<A*>::iterator it = _bees.begin(); it != _bees.end(); ++it) {
delete *it;
}
}
void do_something();

private:
std::list<A*> _bees;
};

这样做可以吗?

最佳答案

您在 A::~A () 中引用了 b 而不是 _b,后者将无法编译。假设您的意思是 _b,那么答案是 - 这取决于。它取决于 A 引用的类 B 对象的生命周期。如果 B 类的对象在 A 类的析构函数被调用之前被销毁,那么它是不可行的,否则是可行的。在任何一种情况下,这段代码都不是很简单,许多人会考虑重新设计以降低它的危险性。

如果不能保证 A 被销毁时 B 仍然存在,那么您需要重新设计一下。例如,您可以按值存储 B(复制它),或者使用引用计数或其他“智能”指针。

关于c++ - 在另一个对象的析构函数中调用一个被销毁对象的成员函数是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6331296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com