c++类和动态内存分配

时间:2021-06-06 20:01:22

动态内存和类

特殊成员函数

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 B=a;
上面有可能创建一个对象将其初始化为a因此调用复制构造函数,也有可能用复制构造函数来穿件零食变量,之后用赋值运算符,初始化总会调用复制构造函数,而赋值运算符也有可能。还有一点就是赋值运算符也会出现复制构造函数那样的问题

静态成员函数

静态成员函数,独立于对象。用static 关键字和作用域解释符 static int f();