为什么这里没有内存泄漏

Tho*_*ard 0 c++ memory-leaks

我试图回答这个问题,所以我决定创建以下简单的测试用例,以便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;
}
Run Code Online (Sandbox Code Playgroud)

我编译了它:

g++ test.cpp -o test
Run Code Online (Sandbox Code Playgroud)

然后,我看到一个意外的输出:

creation of my object
destruction of my object
Run Code Online (Sandbox Code Playgroud)

我绝对不知道这里发生了什么.有谁可以向我解释一下?

PS:我使用的是g ++ 4.6.3

jua*_*nza 6

由于您按值将对象传递给函数,因此您需要复制或移动复制构造.但是你没有用你的原始内存泄漏检查器跟踪它.您可以提供自己的复制构造函数,然后您将看到正在创建两个对象,并且只有一个被销毁:

#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());
}
Run Code Online (Sandbox Code Playgroud)

输出:

creation of my object
copy creation of my object
destruction of my object
Run Code Online (Sandbox Code Playgroud)