Рассмотрим ниже:
#include <iostream>
public ref class TestClass {
public:
TestClass() { std::cerr << "TestClass()\n"; }
~TestClass() { std::cerr << "~TestClass()\n"; }
};
public ref class TestContainer {
public:
TestContainer() : m_handle(gcnew TestClass) { }
private:
TestClass^ m_handle;
};
void createContainer() {
TestContainer^ tc = gcnew TestContainer();
// object leaves scope and should be marked for GC(?)
}
int main() {
createContainer();
// Manually collect.
System::GC::Collect();
System::GC::WaitForPendingFinalizers();
// ... do other stuff
return 0;
}
Мой вывод просто:
TestClass ()
Я никогда не получаю ~ TestClass (). Это упрощение проблемы, с которой я столкнулся в производственном коде, когда список дескрипторов очищается и заполняется несколько раз, а деструкторы дескрипторов никогда не вызываются.
Что я делаю не так?
С уважением,
Ryan