C++ ::这段代码有什么问题吗?编译很好,但人们告诉我会有内存泄漏

abc*_*cde -1 c++

假设有一个用户定义的类Student.考虑以下两个功能:

Student someFunc1() {
    return *(new Student("John",25)); 
}

Student& someFunc2() {
    return *(new Student("John",25)); 
}
Run Code Online (Sandbox Code Playgroud)

没有详细说明为什么他们按照他们的方式实施,他们都是正确的吗?有人告诉我,会有内存泄漏但是怎么回事?

eml*_*lai 6

是的,肯定有问题.

someFunc1() 肯定会导致内存泄漏,因为丢失了分配对象的内存地址.

someFunc2()会导致内存泄漏的风险,因为函数的用户必须记住用奇怪的语法删除返回的对象(delete &object).

它们都不是很好的C++.正确的版本是:

Student someFunc3() {
    return Student("John",25); 
}
Run Code Online (Sandbox Code Playgroud)