(C++) 如何在函数之间传递指向分配有 'new' 的对象的指针而不导致内存泄漏?

(C++) How to pass around a pointer to an object allocated with 'new' from function to function without causing a mem leak?

我正在从事一个旨在理解 内存管理 使用 C++ 的项目,

在函数内部,如果我创建一个新的 Student 对象数组,执行函数操作,然后 return 一个指向该数组的指针,如下所示:

int main(){

    Student *ptr = new newStudents[50];
    Student p.FunctionCall(ptr);
    //stuff
    delete[] ptr;
    return 0;

}

然后我将在 main 中实例化对象(制作副本),也许还有其他 class 方法,注意在每次使用后调用 delete[]

只要我记得从最后一个存在的地方调用 delete,将堆指针从函数传回 main 和/或其他函数是否会导致内存泄漏?

约束:没有智能指针,没有命名空间,也没有 C++ 11 或更高版本。

这是为了作业。感谢所有帮助。

是的。

char* allocate_buffer() {
    return new char[10];
}

int main() {
    auto buf = allocate_buffer();
    delete [] buf;
}

没有内存泄漏。您应该使用 std::arraystd::vector 而不是手动管理内存。

正确的语法是:

MyClass* function(const char* file) {
    MyClass *x = new MyClass[50];  //class_type* array_name = new class_type[amount];

    //stuff to parse values and then instantiate my classes

    return x;  // return x directly as a pointer..
}

首先.. 不要取消引用从 new 和 return 获得的指针,因为它不是指向指针或指向实例的指针。它实际上是一个指向数组内存的指针,通过取消引用它,您将return获取一个实例并丢失其余部分..导致泄漏。

按照您的方法,您现在可以执行以下操作:

int main()
{
    MyClass* array = function("some_file.txt");
    // do something with the array above..
    delete[] array;  //clean up..
}