为什么C++会破坏
Parent
在
Child
班当对象超出范围时,首先销毁
shared_ptr
然后自毁?在我的工作流中,这会导致问题,因为我的
父母亲
类正在管理
小孩
类使用。
#include <iostream>
#include <memory>
class Child;
class Parent
{
public:
Parent() :
child(std::make_shared<Child>())
{
std::cout << "Constructing parent" << std::endl;
}
~Parent() { std::cout << "Destructing parent" << std::endl; }
private:
std::shared_ptr<Child> child;
};
class Child
{
public:
Child()
{
std::cout << "Constructing child" << std::endl;
}
~Child() { std::cout << "Destructing child" << std::endl; }
};
int main()
{
Parent parent;
return 0;
}
编辑
根据这些评论,我觉得我的问题需要更多的解释。我的孩子都在
std::shared_ptr
,当父级超出范围时将释放。我的主程序是CUDA程序,家长可以访问GPU设备。如果父级被删除,我将无法再访问GPU。然而,子级的析构函数需要释放其GPU内存,因此,我希望在父级超出作用域之前执行此操作。但这意味着我必须手动删除智能指针,在我看来,这有点违背了它们的目的。