1、new/delete, new []/delete[]动态内存管理
AA
* pA
= new pA
;
delete pA
;
AA
* pA
= new AA
[10];
delete[] pa
;
malloc/free和new/delete的区别和联系 * malloc/free只是动态分配内存空间/释放空间。而new/delete除了分配空间还会调用构造函数和析构函数进行初始化与清理(清理成员)。
* 它们都是动态管理内存的入口。 * malloc/free是C/C++标准库的函数,new/delete是C++操作符。 * malloc/free需要手动计算类型大小且返回值w为void*,new/delete可自动计算类型的大小,返回对应类型的指针。
* malloc/free管理内存失败会返回0,new/delete等的方式管理内存失败会抛出异常。
2、指针数组的分配与释放
const char** sWordList
= new const char*[JWordList
.size()];
for (int i
= 0; i
< JWordList
.size(); i
++) {
sWordList
[i
] = (new string(to_string(i
+1) + "#" + JWordList
[i
].asString()))->c_str();
}
for (int i
= 0; i
< JWordList
.size(); i
++) {
delete sWordList
[i
];
sWordList
[i
] = NULL;
}
delete[] sWordList
;
sWordList
= NULL;
char** pStrArray
= new char*[n
];
for (int i
=0;i
<n
;i
++)
{
pStrArray
[i
] = new char[5];
cin
>>pStrArray
[i
];
}
for (int i
=0;i
<n
;i
++)
{
delete[] pStrArray
[i
];
pStrArray
[i
] = NULL;
}
delete pStrArray
;
pStrArray
= NULL;