[问题] C++ smart pointer产生2维阵列?

楼主: everydate (月)   2015-01-20 17:21:03
请问shared_ptr 有办法new 动态二维阵列吗?
原本的 C code :
int** p = new int* [3];
for(int i = 0; i < 3; i++)
{
p[i] = new int [i+1];
}
结果会产生一个2维阵列
[]
[][]
[][][]
如果现在要改成 shared_ptr,要怎么做呢?
std::shared_ptr<int*> q( new int* [3], []( int **q ) { delete[] *q; } );
for(int i = 0; i < 3; i++)
{
q.get()+i = shared_ptr<int>(new int[i+1], []( int *q ) { delete[] q; } );
}
compile的结果是...
cannot convert from 'std::shared_ptr<int>' to 'int **'
不过我改不出正确的结果...有人知道要怎么写吗?
还是我这种用法不对? 有其他的STL可以实现这样的功能吗?
先谢过了~m(_ _)m
作者: Killercat (杀人猫™)   2015-01-20 17:41:00
换我我不会那么搞刚 我会用std::vector<std::vector>>
作者: kwpn (ITSST)   2015-01-20 17:45:00
smart pointer通常被用来指向一个物件, 虽然也可以指向阵列,但阵列可用vector取代, 不太会去用smart pointer.
作者: anyoiuo   2015-01-21 19:00:00
作者: wuliou (wuliou)   2015-01-21 20:56:00
双重vector比较快
作者: legendmtg (CLANNAD)   2015-01-21 21:40:00
别乱拿shared_ptr去指operator new[]生出来的阵列...他只会call delete不会call delete[]....用vector当然最好 但如果真的要用到阵列该用boost::shared_array

Links booklink

Contact Us: admin [ a t ] ucptt.com