Создайте двойной указатель (от ptr до ptr) на std :: pair с boost

У меня есть следующий код, который я хочу переписать, чтобы использовать умные указатели:
Я изо всех сил пытаюсь найти какие-либо достойные примеры того, как объявить, выделить память и получить доступ к двойному указателю. Кто-нибудь может привести пример? Я читал, что shared_ptr — это не тот путь, потому что он использует delete вместо delete [], нужно ли использовать shared_array?

#include <iostream>
#include <boost/shared_array.hpp>
#include <iomanip>

int main(int argc, char**argv) {
std::pair<int,float> **corrArray;
int rows=10;
int cols=5;

corrArray = new std::pair<int,float>*[rows];
for(int i=0; i<rows; i++) {
corrArray[i] = new std::pair<int,float>[cols];
}
for(int i=0; i<rows; i++) {
for(int j=0; j<cols; j++) {
corrArray[i][j].first = i+j;
std::cout << std::setw(3) << corrArray[i][j].first << " ";
}
std::cout << "\n";
}
for(int i=0; i<rows; i++) {
delete[] corrArray[i];
}
delete[] corrArray;
return 0;
}

Редактировать: corrArray должен быть объявлен первым (это будет член класса)

0

Решение

Boost shared_ptr уже работает с массивами:

http://www.boost.org/doc/libs/1_53_0/libs/smart_ptr/shared_ptr.htm

Начиная с Boost версии 1.53, shared_ptr может использоваться для хранения указателя на динамически размещенный массив.

shared_ptr<double[1024]> p1( new double(1024) );
shared_ptr<double[]> p2( new double(n) );

Boost shared_ptr является частью C ++ 11 (так что вы также можете использовать их):

умные указатели и массивы

std::unique_ptr<int[]> my_array(new int[5]);

Еще лучше, используйте vector, потому что вы не делитесь им вообще:

std::vector<std::vector<std::pair<int,float>>> corrArray;
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector