1

可以说我有这样的课程:

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 并删除它们,那么我只会崩溃,我不知道该怎么办,因为我知道即使在我删除之后它们仍然存在非常有趣(我通过在类外传递其中一个指针进行检查)

谢谢!

4

2 回答 2

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

于 2012-08-15T06:32:49.270 回答
-1

大卫施瓦茨毕竟赢了,wchar 没有让自己被删除,因为他们没有被 null 终止

于 2012-08-15T07:19:48.300 回答