假设我有一个这样的课程:
class LolClass {
LPWSTR* stuff;
LolClass::LolClass(LPWCHAR lols) {
stuff = new LPWSTR[100];
for (int i = 0; i < 100; i++) {
stuff[i] = new wchar_t[wcslen(lols)+1];
wcsncpy(stuffs[i], lols, wcslen(lols)+1);
}
}
LolClass::~LolClass() {
delete[] stuff;
}
}
所以,如果我打电话
LolClass* veryfunny = new LolClass(L"lol!");
它会让我100 lol,问题是当我打电话
delete veryfunny;
它删除指针数组但不删除单个wchar_t,如果我尝试循环通过wchar_t并删除它们然后我只是崩溃而且我不知道该怎么做因为我知道他们甚至在我删除后它们仍然存在veryfunny(我通过传递课外的一个指针来检查)
谢谢!
答案 0 :(得分:6)
如果你打电话
LolClass* veryfunny = new LolClass(L"lol!");
然后你最终需要打电话:
delete veryfunny;
但是对于数组,您需要delete[]
:stuff[i] = new wchar_t[n]; delete [] stuff[i];
在您的代码中,您需要首先遍历stuff
和delete[]
元素,然后delete[]
数组stuff
本身。
或者只使用std::vector<std::wstring>
。
更新:据我所知,您实际上并不担心删除*veryfunny
,而是关于如何为LolClass
编写正确的析构函数。注意,也可以为全局和自动对象调用析构函数,例如{ LolClass x(L"hello"); } /* boom */
,因此如何为LolClass
实例化对象并不重要。无论如何,你必须把课程弄清楚。
答案 1 :(得分:-1)