C++结构体的一个问题:为什么这样不行?
这个有点大,410001000=4百万,需要起码4MB,定义成局部变量可能会超过堆栈大小。
同样的还是动态分配内存的问题,举个例子,假设我们在构造函数中动态分配了一块内存区域,并赋给一个指针变量
class Sales {
public:
Sales() {
std::cout<<"Sales()"<<std::endl;
p = new int[10];
}
~Sales() {
std::cout<<"~Sales()"<<std::endl;
delete p;
}
private:
int *p;
};
由于合成拷贝构造函数或者合成拷贝赋值运算符会简单的拷贝指针成员,所以意味着Sales多个对象可能指向相同的内存,如果发生类似以下调用:
Sales f(Sales a) { //这里是值传递,所以将被拷贝
Sales b = a; //拷贝给b
return b; //b和a都将被销毁
}
当函数f返回时,在两个对象上都会调用解析构造函数,会
delete其中的指针成员,但两个对象都指向同一块内存,所以这时候就会发生意外的错误。