Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.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++_Unique Ptr - Fatal编程技术网

C++ 二维阵列的简单插入式替换

C++ 二维阵列的简单插入式替换,c++,unique-ptr,C++,Unique Ptr,我继承了一些代码,这些代码有许多函数(不是类成员),可以避免像这样溢出堆栈(注意:这些值不是通过函数调用保存的,因此在语义上static是不必要的): 对于一维情况,std::unique_ptr foo(新的BIGSTRUCT[BIGNUM])是有效的,但是有没有一种简单的方法来解决二维问题呢?astd::unique\u ptr可以是std::unique\u ptr。甚至是二维缓冲区 但是,对于大多数遗留代码,最好用std::vector替换数组,这样就不必担心内存泄漏。sostd::un

我继承了一些代码,这些代码有许多函数(不是类成员),可以避免像这样溢出堆栈(注意:这些值不是通过函数调用保存的,因此在语义上
static
是不必要的):


对于一维情况,
std::unique_ptr foo(新的BIGSTRUCT[BIGNUM])
是有效的,但是有没有一种简单的方法来解决二维问题呢?

a
std::unique\u ptr
可以是
std::unique\u ptr
。甚至是二维缓冲区


但是,对于大多数遗留代码,最好用
std::vector
替换数组,这样就不必担心内存泄漏。

so
std::unique_ptr bar(新的BIGGERSTRUCT[BIGGERNUM][BIGGERNUM])
会按预期工作吗?语法在我看来有点错误,但这并不重要。就像我说的,我只需要使用std::vector。比std::unique_ptr简单得多。我确实同意
std::vector
是正确的答案,但是我的代码有很多上述声明的实例,我几乎没有时间重构…你可以编写一个简单的模板类,使用
unique_ptr
来保存2D数组类型,并重载足够多的运算符,使其表现为2D数组。它们将被声明为静态的,因为它们太大,无法放在堆栈上。如果函数不是可重入函数,则现有代码比动态分配版本简单。您可以使用
std::array
获取值语义。@M.M:代码被多个线程使用,因此需要更改。
void func()
{
    static BIGSTRUCT foo[BIGNUM];
    static BIGGERSTRUCT bar[BIGGERNUM][BIGGERNUM];
    // etc...
}