4
#include <iostream>
using namespace std;

class Obj {
public:
    Obj(){cout <<"create obj" << endl;}
    Obj(const Obj& other){cout<<"copy create obj"<<endl;}
    ~Obj(){cout<<"destructed obj"<<endl;}
};

int main() {
    Obj(Obj((Obj())));
    cout<<"---- exit main ----"<<endl;
}

I have no idea why this program only prints out 1 create obj and 1 destructed obj. Help.

gsamaras
  • 69,751
  • 39
  • 173
  • 279
chenyuandong
  • 266
  • 1
  • 9

1 Answers1

9

Because of Copy Elision. Read more about it here. Your compiler understands, that it can avoid copying the object around, and just creates one object.

gsamaras
  • 69,751
  • 39
  • 173
  • 279