我是否必须删除我分配的wchar_t new
Do i have to delete wchar_t that i allocated with new?
假设我有一个这样的类:
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];
在代码中,需要首先遍历stuff
并delete[]
元素,然后delete[]
数组本身stuff
。
或者只是使用std::vector<std::wstring>
.
更新:据我了解,您实际上并不担心删除*veryfunny
,而是担心如何为LolClass
编写正确的析构函数。请注意,析构函数也会为全局和自动对象调用,例如 { LolClass x(L"hello"); } /* boom */
,所以如何实例化对象并不重要 LolClass
.无论如何,你必须把课程做好。
大卫·施瓦茨获胜 毕竟,wchar 没有让自己被删除,因为它们不是空终止的
相关文章:
- 如果"new int"返回"int*",那么为什么"new int[n]"不返回"int**"?
- MacOS通过在莫哈韦"wchar.h"下破碎的自制啤酒发出叮当声
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 重载运算符new[]的行为取决于析构函数
- 过载'operator new'如何导致无限循环?
- 创建具有 new in 函数和"this is nullptr"异常的对象
- Codelite C++ new project
- 在类c++中使用new声明数组
- g++用户定义的动态链接库上的全局new和delete运算符
- 如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?
- 在将 new 与指针一起使用时,创建数组的指定长度
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- 为什么我的全局 new() 覆盖被绕过了?
- 'const char*'和'WCHAR*'
- 声明C++数组(带或不带 "new" 关键字)
- 在C++中,如果我可以直接将整数分配给指针而不使用"new",为什么要使用"new"?
- 是否可以使用 new 指定具有宏常量的动态分配数组的元素?
- constexpr new 如何分配内存?
- 放置 new 和 uninitialized_fill() 的行为