【发布时间】:2018-03-17 13:20:39
【问题描述】:
考虑以下
template<typename T>
class A
{
private:
class B
{
private:
B* link;
public:
B();
~B();
};
B* head;
public:
A();
~A();
};
上面假设创建和链接每个B的函数被声明和定义
如果我执行如上图的操作,那么
B* position = head;
position = head->link;
head->link = nullptr;
delete[] head;
head = position;
我知道调用内部类析构函数将导致调用外部类析构函数。我是否正确处理了垃圾收集资源 x 或者我做了一些未定义的事情?
【问题讨论】:
-
为什么您认为调用内部类析构函数(您在发布的示例中从未这样做过)会导致调用外部类析构函数?反过来,不是吗?
-
“我做了什么未定义的事情吗?”是的。在非数组类型上调用
delete[]是UB。 -
我认为您将“内部”类误认为“基”类。如果基类具有虚拟析构函数,则在调用基(“内部”)类析构函数时将调用派生(“外部”)类的析构函数。而且 C++ 中没有“垃圾收集”。
标签: c++ memory-management destructor inner-classes