动态内存和类
特殊成员函数
1默认构造函数,如果你没有定义构造函数 2默认的析构函数,如果你没有定义析构函数 3复制构造函数,如果你没有定义 4赋值运算符,如果你没有定义 5地址运算符,如果你妹你没有定义 1,2我们已经说说了,现在我们来说说后面的何时调用复制构造函数
包含一个自身类的引用的够着函数就是复制构造函数A::A(const A&);新建对象并将其初始化为同类现有对象,复制构造函数都会被调用(函数参数按值传递时也会调用)。现在我们来谈谈默认复制函数。 1复制构造函数按值传递时也可能被创建 2默认构造函数是逐个复制非静态成员(成员复制也成为浅复制),复制的是成员的值。 比如对象中有有字符串,当调用复制构造函数时就会赋值的是字符串的地址而不是值。对于自动变量这没有问题,但是如果是new,而且我们在析构函数中使用了delete,在析构函数被调用时,其中的字符串就没了。
class A{
private :
char * testSting;
int len;
public :
void A(const chat * s){
len=std::strlen(s);
testString=new char[len+1];
std::strcpy(str,s);
};
~A(){
delete [] test
}
}
像上面那样的话就会出现我所说的结果
赋值运算符
将一个对象赋值给另一个对象 要注意复制构造函数A a;上面有可能创建一个对象将其初始化为a因此调用复制构造函数,也有可能用复制构造函数来穿件零食变量,之后用赋值运算符,初始化总会调用复制构造函数,而赋值运算符也有可能。还有一点就是赋值运算符也会出现复制构造函数那样的问题
A B=a;