【发布时间】:2014-05-15 20:26:17
【问题描述】:
假设在 C++ 中,我有以下代码:
class Foo {
private:
double* myData;
public:
Foo(double data[]) {
myData = data;
}
}
int main() {
double mainData[] = {1.0};
Foo myfoo(mainData);
}
据我所知,mainData 在传递给Foo 构造函数时被视为指针,因此myData = data 行仅分配指针地址。所以这里没有分配额外的内存,对吧?但是,Foo 类是否负责提供一个析构函数来释放myData 的内存?还是我们有一个动态数组指针实际上指向栈内存?
另外,如果我想保护Foo 的myData 在mainData 更改时不发生更改,是否有一种简单的方法可以强制Foo 构造函数复制它?理想情况下,myData 将是一个简单的数组,而不是指针,但将行 double* myData 更改为 double myData[] 似乎不起作用,因为数组的大小在运行时之前是未知的。
【问题讨论】:
-
这类问题会导致 C++ 中出现很多错误。在您的程序中制定明确的数据所有权政策非常重要。如果您希望
Foo拥有其数据,请将myData替换为std::vector<double>并根据需要填写。或者double myData[SIZE]如果大小在编译时是固定的。
标签: c++ arrays pointers memory dynamic