关于c++的析构函数什么时候调用问题。求热心大佬解惑。
class String{ public: const static int a = 5; private: char *p; public: String(int n){ p = new char[n]; } String(){ p = new char[10]; } ~String(){ // delete [] p; std::cout<<"destructor called"<<"\n"; } }; String func(String a){ // 对象作为返回值的函数 在返回后会调用所返回对象的析构函数 return a; }
1 以下代码只调用一次析构函数
String a(5); String b = func(a); // 执行完调用1次析构函数 内部函数func用完后销毁(b还没初始化,临时变量直接赋值)
2 以下代码调用两次析构函数
String a(5); String b; b = func(a); // 执行完调用2次析构函数。 内部函数用完后销毁+b重新赋值后临时变量销毁
3 以下代码也调用两次析构函数
String a(5); a = func(a); // 执行完调用2次析构函数。 内部函数用完后销毁+b重新赋值后临时变量销毁
4
String str1; //调用无参构造函数初始化 str1 = 5; //执行完调用1次析构函数 str1重新赋值销毁String(5)这个临时变量
我的问题是:为什么1和2、3的结果不一样?调用析构函数的具体时间是怎样的?
#C/C++##笔试题目##面经#