gpt4 book ai didi

c++ - 分配给动态数组时,是否会在 C++ 中分配内存?

转载 作者:行者123 更新时间:2023-11-30 00:51:06 25 4
gpt4 key购买 nike

假设在 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 内存的析构函数?或者我们是否有一个实际指向堆栈内存的动态数组指针?

此外,如果我想在 mainData 更改时保护 FoomyData 不被更改,是否有一种简单的方法来强制Foo构造函数复制它?理想情况下 myData 将是一个简单的数组,而不是指针,但是将行 double* myData 更改为 double myData[] 似乎并没有工作,因为数组的大小在运行时是未知的。

最佳答案

这里的参数不是动态数组:

Foo(double data[])

事实上声明等同于:

Foo(double * data)

甚至decltype会告诉你它们是同一件事,这两个签名会作为重载发生冲突。

所以,没有分配。您只是将指针传递给数组的第一个元素。

此外,C++ 唯一会自动复制数组的地方是当它是类的成员时,空括号 []成员不允许使用不确定大小的语法。 (或者如果是,则在生成复制构造函数或赋值运算符之前,类类型完成时已经确定了大小。)

Also, if I want to protect Foo's myData from changing when mainData is changed, is there a simple way to force the Foo constructor to copy it? Ideally myData would be a simple array, not a pointer, but changing the line double* myData to double myData[] doesn't seem to work because the size of the array is unknown until runtime.

您可以保留数据的拷贝,但如果在编译时不知道其大小(或至少上限),则需要一个指针。我会推荐std::vector在裸指针上,或者至少 std::unique_ptr< double[] > .

关于c++ - 分配给动态数组时,是否会在 C++ 中分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22847288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com