我在接受采访时被问到这个问题:
"在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的新手,所以我有点卡住了。帮助
答案 0 :(得分:3)
它不会为初学者编译。在string x = new string;
中,类型不匹配。您正在为字符串变量分配字符串*。您需要string* x = new string;
。
同样foo
不是Foo
的构造函数,因为情况不同,因此您将丢失返回类型错误。
然后,每次构造新对象时都会泄漏一个字符串对象,因为永远不会在新建对象上调用delete。
答案 1 :(得分:1)
x
未被删除,因此代码中存在内存泄漏。