Chr*_*gis 2 c++ mfc cstring visual-c++
如果我使用这样的CString:
void myFunc(char *str)
{
CString s(str);
// Manipulate other data with CString
// ...
// Finished
// Should I somehow delete 's' here to avoid a memory leak?
}
Run Code Online (Sandbox Code Playgroud)
一旦功能超出范围,字符串是否被删除?
另外,我知道new关键字分配内存,如果构造一个没有new关键字的对象,是否仍然分配了内存?我的直觉告诉我是的,但我想验证.
例如
CString *asdf = new CString("ASDF");
// same as?
CString asdf("ASDF");
Run Code Online (Sandbox Code Playgroud)
Sir*_*tor 15
new在堆上分配内存,所以
CString *asdf = new CString("ASDF");
Run Code Online (Sandbox Code Playgroud)
分配CString在堆上和指针分配给它asdf.asdf在你打电话之前,不会释放内存,也不会调用析构函数delete asdf.
没有new,你在堆栈上分配,所以
CString asdf("ASDF");
Run Code Online (Sandbox Code Playgroud)
分配堆栈内存,asdf代表.当堆栈展开时(例如从函数返回时)会自动回收此内存,并且当析构函数asdf超出范围时会自动调用析构函数.
另外,CString清理自己的资源,所以如果CString对象被清理(如果它在堆栈上则超出范围,或者如果它在堆上则被删除),它所使用的资源也将被清除.
| 归档时间: |
|
| 查看次数: |
10915 次 |
| 最近记录: |