什么时候需要用到 Delete[]

时间:2022-04-21 14:02:31
如题, 除了使用new需要Delete[]
那如果是

char *use=......();
wchar_t *pUnicode = ......();
delete[]use;
use = NULL;
delete[]pUnicode;
pUnicode = NULL;
//这种情况是不是use和pUnicode都需要释放, 我这样写应该没错吧?

那如果是

char *use=......();
wchar_t *pUnicode = char_To_wchar_t(use);
delete[]use;
use = NULL;
delete[]pUnicode;
pUnicode = NULL;
//这种情况use被转成wchar_t *类型了, 是否也是需要释放这两个指针, 这样释放也是没错的吗

还有一种情况, 就是

wchar_t * char_To_wchar_t(char *pStr)
{

wchar_t *abc=......(pStr);

return abc;
//这种情况需要返回一个宽字符, 那abc这个指针要在哪里delete[]  ????
}

7 个解决方案

#1


delete  [] use;// use 不是数组!

#2


无new [],无delete[]

#3


引用 1 楼 schlafenhamster 的回复:
delete  [] use;// use 不是数组!

呃, 这个写错了,不能加[], 那第三个问题呢, 函数内返回的话需要delete 吗, 如果要的话要在哪里执行delete 

#4


引用 2 楼 zhao4zhong1 的回复:
无new [],无delete[]

什么时候需要用到 Delete[]谢谢赵老师, 不过如果是函数内部new了, 要返回的话需要delete吗

wchar_t * const_char_To_wchar_t(const char *pStr)
{
int nUnicodeLen = ::MultiByteToWideChar(CP_ACP,0,pStr,-1,0);
wchar_t *pUnicode = new wchar_t[nUnicodeLen + 1];  //这里有new
memset(pUnicode, 0, (nUnicodeLen + 1)*sizeof(wchar_t));
::MultiByteToWideChar(CP_ACP,0,pStr,-1,(LPWSTR)pUnicode,nUnicodeLen);
return pUnicode;
}

#5


无new [],无delete[];
跟是否在函数中无关。

#6


delete [] 和delete本质的区别是,前者会调用n释构函数,为每的new出来的对象释构,后者只调用一次

char* p=new char[100];
delete p; //不需要delete[] p;因为没有释构的需要

aClass* p=new aClass[100];
delete[] p;//必须delete[] ,如果没有[],p指向的内存同样会被释放,但是,释构函数只被调用一次,而不是100次

#7


多跟2楼的学学

#1


delete  [] use;// use 不是数组!

#2


无new [],无delete[]

#3


引用 1 楼 schlafenhamster 的回复:
delete  [] use;// use 不是数组!

呃, 这个写错了,不能加[], 那第三个问题呢, 函数内返回的话需要delete 吗, 如果要的话要在哪里执行delete 

#4


引用 2 楼 zhao4zhong1 的回复:
无new [],无delete[]

什么时候需要用到 Delete[]谢谢赵老师, 不过如果是函数内部new了, 要返回的话需要delete吗

wchar_t * const_char_To_wchar_t(const char *pStr)
{
int nUnicodeLen = ::MultiByteToWideChar(CP_ACP,0,pStr,-1,0);
wchar_t *pUnicode = new wchar_t[nUnicodeLen + 1];  //这里有new
memset(pUnicode, 0, (nUnicodeLen + 1)*sizeof(wchar_t));
::MultiByteToWideChar(CP_ACP,0,pStr,-1,(LPWSTR)pUnicode,nUnicodeLen);
return pUnicode;
}

#5


无new [],无delete[];
跟是否在函数中无关。

#6


delete [] 和delete本质的区别是,前者会调用n释构函数,为每的new出来的对象释构,后者只调用一次

char* p=new char[100];
delete p; //不需要delete[] p;因为没有释构的需要

aClass* p=new aClass[100];
delete[] p;//必须delete[] ,如果没有[],p指向的内存同样会被释放,但是,释构函数只被调用一次,而不是100次

#7


多跟2楼的学学