gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:02:20 27 4
gpt4 key购买 nike

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

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/

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