为什么运行之后会报错呢?(析构函数)(C++)

来源:百度知道 编辑:UC知道 时间:2024/05/31 18:45:31
//具体问题写在程序的后面,多谢。
#include<iostream>
#include<string>
using namespace std;
class A
{
private:
char *name;
public:
A(char *n)
{
name=new char[strlen(n)+1];
strcpy(name,n);
cout<<name<<endl;
}
~A()
{
cout<<"*******"<<endl;
delete name;
cout<<"*******"<<endl;
}
};
//text(A &a)
//{}
//写成上面的形式没有问题,但是为什么呢
text(A a)
{}
int main()
{
A a1("nacuole?");
text(a1);
return 0;
}
//为什么text中传的参数的前面要加&呢?按理说,如果不加的话,
函数传递的是原来参数的值,并且会给创建一个形参变量,然后赋值为传递的值,然后在函数调用结束的时候就会调用形参的析构函数。这应该和原来的那个变量没什么联系啊。但是为什么程序是在执行外部对象的析构函数的delete的时候出错的呢?

因为你传给a的时候,传的是a1里的指针,这个指针出text函数就被析构了,而你main函数终止时,析构函数里又对同一个指针delete,肯定出错的,写成&a是因为没有产生新的对象,不存在a1被提前delete的问题。