首页 > 解决方案 > 这是关于删除指针的菜鸟问题

问题描述

下面的代码是一个玩具示例,说明我正在尝试做的事情可能会被误导。我相信这是泄漏内存,因为我使用的是新的但没有删除。这是正确的,如果是这样,有没有办法删除主要方法中的泄漏内容?还是在那个时候无法访问?

#include <iostream>
using namespace std;

int* f(){
    int* x = new int;
    *x = 4;
    return x;
};

int main(){
    cout << *f();
    return 0;
}

标签: c++

解决方案


诀窍是将返回的指针值捕获到一个变量中,以便您可以在 main() 中多次引用它。像这样:

int main(){
   int * ptr = f();
   cout << *ptr;
   delete ptr;
   return 0;
}

(旁注:最好返回一个int按值代替,但在需要动态分配要返回的对象的情况下(例如,当您想使用运行时多态性时),您应该通过 a 返回分配的对象智能指针而不是原始/C风格的指针。这样你就不必记住delete返回的对象,因此你不会忘记这样做并导致内存泄漏)


推荐阅读