0
This看起來類似於我所在的位置以及this問題。C++內部類破壞程序資源管理
考慮以下
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
還是我做了一些未定義的內容?
爲什麼你認爲調用內部類的析構函數(你永遠不會在你發佈的示例中做)將導致外部類析構函數被調用?這是另一種方式,不是嗎? – bnaecker
「我做了一件未定義的東西嗎?」是。在非數組類型上調用'delete []'是UB。 – bnaecker
我認爲你是錯誤的「內部」類與「基地」類。如果基類具有虛擬析構函數,則當調用base(「inner」)類析構函數時,將調用派生(「外部」)類的析構函數。而C++中沒有「垃圾收集」。 – VTT