关于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++##笔试题目##面经#