c++ - shared_ptr 中 multidim 数组的类型是什么?

标签 c++ c++11 multidimensional-array shared-ptr

我在类型转换方面遇到了一些问题。 这是工作代码:

void init(signed char[16][16][16])
{
}

int main()
{
    auto cache = new signed char[16][16][16];
    init(cache);
    return 0;
}

如果在 Windows 中编译,这里是一个有问题的代码。在 Linux 中,这段代码工作得很好:

int main()
{
    std::shared_ptr<signed char[16][16][16]> ptr;
    ptr.reset(new signed char[16][16][16]);
    init(ptr.get());
    return 0;
}

MSVS 给我一个错误:Error C2664 'void init(signed char [][16][16])': cannot convert argument 1 from 'signed char (*)[16][16][16]' to '签名字符 [][16][16]'

如何通过 shared_ptr 正确使用 multidim 数组? “自动缓存”的类型名称是什么?

最佳答案

这是一个 3D shared_ptr

示例
using myType = signed char;
using ManagedInt = std::shared_ptr<std::shared_ptr<std::shared_ptr<myType>>> ;

const int N = 16;

{
    auto managedMat = ManagedInt();
    managedMat.reset(new std::shared_ptr<std::shared_ptr<myType>>[N], [](auto p) {
           for(uint32_t i = 0; i <N; ++i){
                p->reset();
           }
        });
    for(uint32_t i = 0; i< N;++i){
        managedMat.get()[i].reset(new std::shared_ptr<myType>[N], [](auto p) {
           for(uint32_t i = 0; i <N; ++i){
                p->reset();
           }
        });
        for(uint32_t j = 0; j < N; ++j){
            managedMat.get()[i].get()[j].reset(new myType[N], [](auto p) {
                delete[] p;
        });
        }
    }
    for(uint32_t i = 0; i < N; ++i)
        for(uint32_t j = 0; j < N; ++j)
            for(uint32_t k = 0; k < N; ++k)
                managedMat.get()[i].get()[j].get()[k] = j;


    for(uint32_t i = 0; i < N; ++i)
        for(uint32_t j = 0; j < N; ++j)
            for(uint32_t k = 0; k < N; ++k)
                std::cout<<managedMat.get()[i].get()[j].get()[k];       
}

Live

如果可以的话,我建议使用 vector

关于c++ - shared_ptr 中 multidim 数组的类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57337031/

相关文章:

c++ - 构造函数调用虚函数的困惑

c++ - 数组语法错误

Java HW,打印出带有字符串/字符的多维整数数组

c++ - 名称、论文、书籍未在此范围内声明非成员函数 C++

c++ - C++中的函数地址文字在哪里?

c++ - 结构体中的友元函数有什么用?

c++ - OS X libc++ std::uniform_real_distribution 错误

c++ - 读取二进制文件时输出不一致

C 多维数组,不兼容的赋值

ios - 简单的交换代码在 swift 中不起作用