2013-03-19 58 views
0

我有下面的代码,我想重写使用智能指针: 我很努力地找到任何体面的例子如何申报,分配内存并访问双指针。任何人都可以提供示例吗?我读过shared_ptr不是要走的路,因为它使用delete而不是delete [],是否需要使用shared_array?创建一个双指针(ptr到ptr)std :: pair与提升

#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

“双指针”是指“指向指针的指针”,而不是“指向双指针的指针”,是的? – 2013-03-19 23:07:08

+0

是的,我的意思是指针指针 – user2089851 2013-03-19 23:09:09

+1

只是我的2美分:我会去写我自己的类为您的对的2d结构(包括适当的析构函数),或与'vector >> '。 – us2012 2013-03-19 23:31:01

回答

0

升压shared_ptr的已经可与阵列:

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

与升压版本开始1.53,shared_ptr可以用来保存一个指向动态分配数组的指针。

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

升压shared_ptr的是C++ 11的一部分(所以你可以使用那些为好):

smart pointers and arrays

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

更妙的是,使用矢量因为你'根本不共享:

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

你错过了一点 - 我想宣布一个shared_array作为私有类变量,然后为它分配内存。并非所有人都在一起去... – user2089851 2013-03-20 00:16:28

+0

@ user2089851阅读'shared_ptr'的方法;你可以使用'reset()'来改变它以后指向的内容。有了'vector',它会更好,因为您可以稍后“分配” - “push_back”。 – congusbongus 2013-03-20 00:38:20