【发布时间】:2013-03-19 23:05:38
【问题描述】:
我想重写以下代码以使用智能指针: 我正在努力寻找任何关于如何声明、分配内存和访问双指针的体面示例。谁能提供一个例子?我读过 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 必须首先声明(它将是一个类成员)
【问题讨论】:
-
“双指针”是指“指向指针”,而不是“指向
double”的指针,是吗? -
是的,我的意思是指向指针的指针
-
只需我的 2 美分:我会为你的二维结构对编写自己的类(包括适当的析构函数),或者使用
vector < vector < pair <int,float> > >。 -
超出范围时vector不会消失吗?
-
是的,但是原始指针和智能指针也是如此(后者带着他们的指针,如果你没有对它们的其他引用,前者将他们的指针留在炼狱和地狱之间)。只要你需要,让你的对象保持生命是你的工作(尽管我个人发现这通常是自然发生的)。
标签: c++ boost double-pointer