Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 复杂数组的数组_C++_Arrays - Fatal编程技术网

C++ 复杂数组的数组

C++ 复杂数组的数组,c++,arrays,C++,Arrays,我正在使用一个数组和一组数组: typedef std::valarray<Complex> CArray; CArray ca; CArray x[16]; 是复印件还是参考资料 如何使CArray x[16]只是一个包含16个指针的列表,稍后将分配给现有数组?i、 e.如何避免硬拷贝 我对此不确定: CArray *x[16]; x[0] = *ca; 您是对的,x[0]=ca将执行拷贝分配,这显然不是您想要的 您的指针示例很接近,但您需要获取ca的地址: 但是,您必须非

我正在使用一个数组和一组数组:

typedef std::valarray<Complex> CArray;

CArray ca;

CArray x[16];
是复印件还是参考资料

如何使CArray x[16]只是一个包含16个指针的列表,稍后将分配给现有数组?i、 e.如何避免硬拷贝

我对此不确定:

CArray *x[16];
x[0] = *ca;
您是对的,x[0]=ca将执行拷贝分配,这显然不是您想要的

您的指针示例很接近,但您需要获取ca的地址:

但是,您必须非常小心地正确管理ca的生存期,以免它过早地超出范围

您可能需要研究如何使用智能指针

编辑:给出你对另一个答案的评论


难道没有一个系统可以让数组在没有引用之前一直存在吗?我来自Python,哪个垃圾收集器

是的,正如我前面提到的,您可能需要使用智能指针。如果x是唯一的所有者,您可以从std::unique_ptr开始:

std::unique_ptr<CArray> x[16];

共享指针更易于使用,因为它们易于复制,但您需要在时间和空间开销上付出一些代价。

要创建指针数组,您确实应该使用

CArray *x[16];
要从值或引用类型赋值,请使用运算符(&O):

x[0] = &ca;
有两件事需要记住:

CArray ca是一个自动对象,因此它的生存期限制在变量的范围内。 数组x没有初始化为任何值,如果依赖于空指针,则必须自己初始化它。
硬拷贝。。。顺便说一句,你也可以在调试器中运行它,自己看看……Ok@barakmanos。如何避免硬拷贝?就像你说的:让它们成为指针。你的代码缺少上下文,所以我无法回答这个问题。例如,您可以使用x[0]=&ca,但您只能在函数的范围内使用它,这在您的问题的上下文中同样是缺失的。@SamVarshavchik我在问题的末尾发布了一个可能的解决方案,但它不起作用。怎么了?难道没有一个系统可以让数组在没有引用之前一直存在吗?我来自Python,哪个垃圾收集器!您可能需要查看std::shared_指针。这里是C++本身没有垃圾回收器。我建议先看看,然后继续分享。我还为sharedor“智能”指针提供了更好的参考。这是一个美丽的故事,所以写下他们吧。
x[0] = std::make_unique<CArray>();
std::shared_ptr<CArray> x[16];
x[0] = std::make_shared<CArray>();
CArray *x[16];
x[0] = &ca;