【发布时间】:2013-10-01 13:55:32
【问题描述】:
我有一个带有动态数组 (DA) 的类
class DA{
private:
double* array;
int size N;
//other stuff
public:
DA(){
array=NULL;
}
DA(int PN){
N=PN;
array=new double[N];
};
//destructor and other stuff
}
这似乎没问题。现在我想要一个具有一个 DA 对象的“应用程序”类:
class App{
private:
DA myDA;
public:
App(int N){
//create myDA with array of size N
DA temp(N);
myDA=temp;
};
}
问题是,我不知道如何在 App 构造函数中创建 myDA。我这样做的方式是为 temp 分配内存,然后 myDA 指向 temp。但我猜为 temp 分配的内存在构造函数完成后被删除。因此,当我执行我的程序时出现内存错误。那么如何正确分配内存呢?
【问题讨论】:
-
您可能对the rule of three 感兴趣。您还应该考虑使用
std::vector<double>而不是动态数组。 -
请注意,
array = new double(N);正在创建一个指向单个double的指针。我猜你的意思是array = new double[N]; -
@juanchopanza:是的,我就是这个意思。谢谢!
-
类的职责应该尽可能少。内存管理本身就是一项巨大的责任,会引发类创作问题(三法则)、异常安全问题(C++ 初学者和中级几乎不可能正确解决)、增加代码复杂性、引入对某些数据结构的硬编码依赖,等等。最好跳过(更喜欢值类型)或将内存管理外包给智能指针和(甚至更好)标准容器。
-
@phresnel:我不想使用像vector这样的容器的原因,因为我担心性能下降。 DA 的数组成员应该包含类似 10^6 的双精度数。那这些容器不会有问题吗?
标签: c++ memory dynamic allocation