C2440 使用Shared_ptr创建二维阵列

C2440 Create 2D Array with Shared_ptr

本文关键字:二维 阵列 创建 使用 Shared ptr C2440      更新时间:2023-10-16

>我正在尝试使用 shared_ptr 创建 2D 数组,但我有一个错误C2440.

我想我写了正确的代码,但发生了错误。

请帮助我,谢谢。

#include <iostream>
#include <memory>
int main()
{
int size;
std::cout << "Input size : ";
std::cin >> size;
std::shared_ptr<std::shared_ptr<int[]>[]> myArr(new std::shared_ptr<int[]>[size]);
for (int i = 0; i < size; i++)
myArr[i] = std::make_shared<int[]>(size);         // error..
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
myArr[i][j] = (j+1);
}
}
}

我更改了以下代码:

for (int i = 0; i < size; i++)
myArr[i] = std::make_shared<int[]>(size);         // error..

到:

myArr[i] = std::shared_ptr<int[]>(new int[size]);         

shared_ptr做数组,不能用make_shared

您的第一个循环(松散地(尝试通过std::make_shared执行以下操作,这是一个错误:

int *t = int*[];  // ERROR

相反,您可以直接创建共享指针并为其分配:

for (int i = 0; i < size; i++)
myArr[i] = std::shared_ptr<int[]>(new int[size]); 

直接使用std::shared_ptr(new T)而不是std::make_shared<T>(...),但是在这种情况下,您不能使用后者。