C++ 超新手问题

来源:百度知道 编辑:UC知道 时间:2024/06/14 17:51:10
class A
{
public int *p;
}

void main()
{
int m = 1;
A myClass;
myClass.p = &m;
A newClass = myClass;
}
这样的话newClass和myClass的指针p都会指向m的地址,那么析构的时候岂非会将m的地址释放两次?可是运行时候不出错误。
谁把浅拷贝的时候什么时候出现错误详细讲讲。

析构的时候只会把自己本身的成员delete掉,因此,只会把p变量本身占用的空间给删掉,至于p指向m,m是不会被删掉的。

看了你的程序,我很吃惊!你连最基本的一个类的完整结构都没弄清楚就来整这样的问题,对你是没有好处的。给你个建议,先把一个类的基本结构,对象的构造过程搞清楚了。构造函数,析构函数什么时候怎么调用。听我一句劝,学习语言刚开始时一定要注重基础,不要基础没学就想着用了。

运行下下面这个程序,如果你知道这是怎么回事!我想会对你学习C++语言的整个过程都有点帮助的。

#include "iostream"
#include "string"
using namespace std;

class A //声明类A
{
public:
A(int a)//构造函数
{
cout<<"构造函数被调用"<<endl;
p = &a; //成员变量要在构造函数中初始化
}
~A()//析构函数,对象生存期结束时系统自动调用
{
cout<<"析构函数被调用"<<endl;
}
void display()//成员函数
{
cout<<*p<<endl;
}
private:
int *p; //成员变量
}

main()
{
int m = 1;
A a1(m);
a1.display();
}

newClass = myClass; 在这句话中调用的是拷贝构造函数。

1.对象的直接赋值也会调用拷贝构造函数
2.函数参数传递只要是按值传递也调用拷贝构造函数
3.函数返回只要是按值返回也调用拷贝构造函数

new