gpt4 book ai didi

c++ - 如何使用 new 运算符在表达式中聚合初始化 STL 容器?

转载 作者:行者123 更新时间:2023-11-30 00:49:58 24 4
gpt4 key购买 nike

我正在尝试做类似的事情:

using std::array;

array< array<int, 3>*, 10> arrsPtrs;

void f()
{
arrsPtrs[0] = new array<int, 3> {1, 2, 3}; //bad!
arrsPtrs[0] = new array<int, 3> {{1, 2, 3}}; //bad!
arrsPtrs[0] = new array<int, 3> ( {1, 2, 3} ); //bad!
arrsPtrs[0] = new array<int, 3> ( {{1, 2, 3}} ); //bad!
}

是否可以在这样的表达式中聚合初始化STL容器?

PS:可能这很重要 - 我有 VS2010。

最佳答案

你想要arrayPtrs[0] = new array<int, 3> {{1,2,3}} .

话虽如此,你为什么要这样做?拥有一个指向动态分配数组的指针数组几乎肯定是执行任何您尝试做的事情的错误方法。

编辑:实际上,每次你 new C++中的东西,你需要一个相应的delete .与 Java 或 C#(被垃圾收集)等语言不同,您应该很少使用原始 new。在现代 C++ 中,因为它很容易导致内存泄漏。

基本上,而不是:

array<array<int, 3>*, 10> arrsPtrs;

你反而想使用:

array<array<int, 3>, 10> arrsPtrs;

如果你想将它传递给一个函数,你可以简单地通过(const)引用传递它:

void some_function(const array<array<int, 3>, 10>& arr)
{
....
}

关于c++ - 如何使用 new 运算符在表达式中聚合初始化 STL 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26563266/

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