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
  • 71,951
  • 46
  • 188
  • 305
chenyuandong
  • 286
  • 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
  • 71,951
  • 46
  • 188
  • 305