gpt4 book ai didi

c++ - 我是否必须删除我分配给 new 的 wchar_t?

转载 作者:行者123 更新时间:2023-11-30 01:25:39 24 4
gpt4 key购买 nike

假设我有这样一个类:

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 次,问题是我打电话的时候

delete veryfunny;

它会删除指针数组,但不会删除单个 wchar_t,如果我尝试遍历 wchar_t 并删除它们,那么我就会崩溃,我不知道该怎么做,因为我知道即使在我删除之后它们仍然存在非常有趣(我通过在类外传递一个指针来检查)

谢谢!

最佳答案

如果你打电话

LolClass* veryfunny = new LolClass(L"lol!");

那么你最终需要调用:

delete veryfunny;

但是对于数组,你需要delete[] : stuff[i] = new wchar_t[n]; delete [] stuff[i];

在您的代码中,您需要先循环遍历 stuffdelete[]元素,然后是 delete[]数组 stuff本身。

或者只使用 std::vector<std::wstring> .


更新: 据我了解,您实际上并不担心删除 *veryfunny ,而是关于如何为 LolClass 编写正确的析构函数.请注意,析构函数也会为全局和自动对象调用,例如{ LolClass x(L"hello"); } /* boom */ ,因此如何LolClass 实例化对象并不重要.在任何情况下,您都必须正确上课。

关于c++ - 我是否必须删除我分配给 new 的 wchar_t?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11964933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com