0

スマート ポインターを使用するために書き直したい次のコードがあります。宣言、メモリの割り当て、ダブル ポインターへのアクセスの適切な例を見つけるのに苦労しています。誰でも例を挙げてもらえますか? delete[] の代わりに delete を使用するため、shared_ptr を使用する方法ではないことを読みましたが、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 に答える