C ++内存管理。这段代码有什么问题?

时间:2015-10-20 02:39:17

标签: c++ memory-management memory-leaks new-operator delete-operator

我在接受采访时被问到这个问题:
"在C ++中的内存管理方面,请说明此代码出错的所有内容?"

int main(){
        for(int i = 0; i<10; i++){
        Foo foo = new Foo();
        delete foo; }
        }



class Foo{

    foo(){
        string x = new string;
        }
    }

我是C ++和OOP的新手,所以我有点卡住了。帮助

2 个答案:

答案 0 :(得分:3)

它不会为初学者编译。在string x = new string;中,类型不匹配。您正在为字符串变量分配字符串*。您需要string* x = new string;

同样foo不是Foo的构造函数,因为情况不同,因此您将丢失返回类型错误。

然后,每次构造新对象时都会泄漏一个字符串对象,因为永远不会在新建对象上调用delete。

答案 1 :(得分:1)

x未被删除,因此代码中存在内存泄漏。