以下代码合法吗?
int *makeArray(int size)
{
int *result = new int[size];
delete[] result;
return result;
}
int main()
{
int *pointer = makeArray(10);
/* code ... */
return 0;
}
肯定
不
! 这是
Undefined behavior
因为你返回了一个删除的指针。在使用delete操作符之后,你告诉你的操作系统,它可以释放内存,并将其用于任何它想要的用途。读或写是非常危险的(程序崩溃、蓝屏、银河毁灭)
int *makeArray(int size)
{
int *result = new int[size];
return result;
}
int main()
{
int *pointer = makeArray(10);
/* code ... do some stuff with pointer */
delete[] pointer;
return 0;
}
这是安全的还是会导致内存泄漏?
是的,这是正确的使用方法
new
和删除运算符。你用
新
因此,即使数据超出范围,也会保留在内存中。无论如何,这不是最安全的代码,因为
新
必须有一个
delete
或
delete[]
你不能把它们混在一起。
有没有更好的方法返回指针?
对它叫
Smart Pointer
在C++程序员中不应该使用
新
但还是聪明的指针。有一个C++社区编码指南来避免这些调用。
Guideline R11