关于复制函数
下面代码是为了反应默认构造函数,复制构造函数,析构函数的调用情况问: Exmpl val3=Exmpl();//c++primer p407 先用默认构造函数构造一个临时对象,再用复制函数。对啊,既然是临时对象,那是不是还要调用析构函数?
可由截图知 他只用了默认构造。。。?
程序代码:
#include <iostream> #include<string> #include <vector> #include"Exmpl.h" using namespace std; void fun1(Exmpl a) {} void fun2(Exmpl &b) {} Exmpl fun3() { Exmpl obj; return obj;//复制函数 } int main(){ cout<<" Exmpl val1;//用默认构造函数"<<endl; Exmpl val1;//用默认构造函数 cout<<" Exmpl val3=Exmpl();//默认构造函数,复制"<<endl; Exmpl val3=Exmpl();//c++primer p407 默认构造函数构造了一个临时对象,然后复制构造函数用该对象初始化 默认构造,复制构造 cout<<" Exmpl val2=val1;//复制函数"<<endl; Exmpl val2=val1;//复制函数 cout<<" fun1(val1);//复制函数 void fun1(Exmpl a)"<<endl; fun1(val1);//复制函数 cout<<" fun2(val1);//无需复制 void fun2(Exmpl &b)"<<endl; fun2(val1);//无需复制 cout<<" val1.input(cin);"<<endl; val1.input(cin); cout<<" val2=val1;"<<endl; val2=val1; cout<<" fun3(); Exmpl fun3() Exmpl obj; return obj;//复制函数}"<<endl; fun3(); cout<<" Exmpl *p=new Exmpl;//默认构造函数创造动态的。。。"<<endl; Exmpl *p=new Exmpl;//默认构造函数创造动态的。。。 cout<<" vector<Exmpl> vec(3);//默认构造函数创建一个临时对象,在复制构造函数复制到vector的各个元素然后析构函数删除临时对象 "<<endl; vector<Exmpl> vec(3);//默认构造函数创建一个临时对象,在复制构造函数复制到vector的各个元素然后析构函数删除临时对象 cout<<" delete p;"<<endl; delete p; cout<<" return 0;"<<endl; return 0; } struct Exmpl{ //默认 构造函数 Exmpl():ival(0) { std::cout<<"Exmpl"<<std::endl; } //复制构造函数 Exmpl(const Exmpl& E):ival(E.ival),sval(E.sval) { std::cout<<"Exmpl(const Exmpl&)"<<std::endl; } //输入的构造 std::istream & input(std::istream& in) { std::cout<<"input "<<"enter int and string"<<std::endl; in>>ival>>sval; return in; } //赋值操作符 Exmpl& operator =(const Exmpl &eq) { std::cout<<"operator ="<<std::endl; ival=eq.ival; sval=eq.sval; return *this; } //析构函数 ~Exmpl() { std::cout<<"~Exmpl()"<<std::endl; } int ival; std::string sval; };谢谢