我正在尝试回答 this问题,所以我决定创建以下简单的测试用例,以便 OP 可以自己查看内存泄漏。
#include<iostream>
class MyObject
{
public:
MyObject(){std::cout << "creation of my object" << std::endl;}
virtual ~MyObject(){std::cout << "destruction of my object" << std::endl;}
};
void processMyObject(MyObject foo)
{
}
int main()
{
processMyObject(*new MyObject());
return 0;
}
我编译了它:
g++ test.cpp -o test
然后,我看到了意想不到的输出:
creation of my object
destruction of my object
我完全不知道这里发生了什么。谁能给我解释一下?
PS:我用的是g++ 4.6.3
最佳答案
由于您按值将对象传递给函数,因此会产生复制或移动复制构造。但是您没有使用原始内存泄漏检查器来跟踪它。你可以提供你自己的复制构造函数,然后你会看到两个对象被创建,只有一个被销毁:
#include<iostream>
class MyObject
{
public:
MyObject() {std::cout << "creation of my object" << std::endl;}
MyObject(const MyObject&) {std::cout << "copy creation of my object" << std::endl;}
~MyObject() {std::cout << "destruction of my object" << std::endl;}
};
void processMyObject(MyObject foo) {}
int main()
{
processMyObject(*new MyObject());
}
输出:
creation of my object
copy creation of my object
destruction of my object
关于c++ - 为什么这里没有内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24799951/