0

我有以下代码,我想重写以使用智能指针:我正在努力寻找任何关于如何声明、分配内存和访问双指针的体面示例。谁能提供一个例子?我读过 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 必须首先声明(它将是一个类成员)

4

1 回答 1

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]);

更好的是,使用矢量,因为您根本不共享它:

std::vector<std::vector<std::pair<int,float>>> corrArray;
于 2013-03-19T23:56:14.520 回答