共享_ptr中多功能数组的类型是什么

What is the type of a multidim array in shared_ptr?

本文关键字:类型 是什么 数组 多功能 ptr 共享      更新时间:2023-10-16

我在类型铸造方面有一些问题。这是工作代码:

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给我一个错误:错误c2664'void init(签名char [] [16] [16](':无法转换参数1从'签名char(*([16] [16] [16] [16]'to转换为'签名char [] [16] [16]'

如何使用共享_ptr正确使用多功能数组?什么是"自动缓存"的类型名称?

以下是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

我建议使用向量,如果您可以