我是否必须删除我分配的wchar_t new

Do i have to delete wchar_t that i allocated with new?

本文关键字:wchar new 分配 是否 删除      更新时间:2023-10-16

假设我有一个这样的类:

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 .无论如何,你必须把课程做好。

大卫·施瓦茨获胜 毕竟,wchar 没有让自己被删除,因为它们不是空终止的