如果我有这个:
double foo()
{
double* ptr = new double(0);
return *ptr;
}
如果在返回之前没有删除ptr,这会导致内存泄漏吗?因此,在从函数返回之前删除ptr的正确方法是什么?
答案 0 :(得分:7)
您有几种解决方案:
答案 1 :(得分:4)
如果您不希望对象(而不是其值)存在于函数范围之外,那么动态分配它没有多大意义。
只需在堆栈上分配它:
double foo() {
double d = 0;
...
return d;
}
替代方法是让对象存在于函数范围之外,在这种情况下,您不希望在返回之前删除它。管理它的最佳方法是使用某种智能指针(在大多数情况下,这会自动处理内存管理)。
答案 2 :(得分:0)
如果您要返回ptr
指向的值,那么您肯定会在离开该函数之前不想要删除它。如果你删除它然后返回它,调用函数将尝试访问已被释放的内存,这是禁止的。
答案 3 :(得分:0)
只要您在调用函数的同一个类中的指针中收到foo()的返回值,就可以了。之后,当你不再需要它时,可以在该指针上使用delete ...
答案 4 :(得分:0)
为什么要动态分配双精度?我什么都想不到
new double
有意义的上下文。只需声明double
作为一个局部变量。
关于你唯一想要以动态方式分配对象的时间
如果是多态的话,函数结束时的生命周期结束
参与其中。在这些情况下,您可以使用std::auto_ptr
(或
std::unique_ptr
如果您确定所有编译器都是您将要的
看,将支持C ++ 11)。