c++ - constructor and copy constructor -
#include <iostream> using namespace std; class t{ private: int * arr; public: t() { arr=new int[1]; arr[0]=1;} t(int x) {arr=new int[1]; arr[0]=x;} t(const t &); ~t() {cout<<arr[0]<<" de"<<endl; delete [] arr;} t & operator=(const t & t1){arr[0]=t1.arr[0];return *this;} void print(){cout<<arr[0]<<endl;} }; t::t(const t & t1) {arr=new int[1];arr[0]=t1.arr[0];} int main(){ t b=5; cout<<"hello"<<endl; b.print(); b=3; b.print(); return 0; }
why result
hello 5 3 de 3 3 de ?
why "t b=5;" not call destructor? how "t b=5" works? create temp object (of class t) using constructor "t(int x)" first, use copy constructor "t(const t &)" create b? if case why not call desctructor temp object?
why "t b=5;" not call destructor?
when this:
t b=5;
you copy initialization. semantically, implicit converting constructor t(int)
called, , copy constructor t(const t&)
called instantiate b
. however, compiler allowed elide copy, happening in case. object constructed in place, without need copy construction. why not see destructor call. class still needs copy constructor code compile: copy elision optional, , whether code compiles should not depend on whether compiler performing elision or not.
if had said
t b(5);
then there direct initialization, no copy elision, , 1 constructor call. class not require copy constructor in code compile.
Comments
Post a Comment