chenyuandong
chenyuandong

Reputation: 296

Confusion in C++ constructor

#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.

Upvotes: 4

Views: 182

Answers (1)

gsamaras
gsamaras

Reputation: 73366

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.

Upvotes: 9

Related Questions