z***u 发帖数: 105 | 1 问题:
下面的程序有什么问题?
void foo(void)
{
。。。。
vector v; //C是一个class
v.push_back(new C());
。。。。
}
答: 会有memoryleak。
问为什么可以用unique_ptr,而不能用auto_ptr呢?比如
void foo(void)
{
。。。。
vector< unique_ptr > v; //可以
//vector< auto_ptr > v; //不可以
v.push_back(new C());
。。。。
}
自己没答上来,请教为什么? |
L********e 发帖数: 159 | |
d**x 发帖数: 243 | 3 Only used shared_ptr or unique_ptr, never used auto_ptr. |
s***n 发帖数: 373 | 4 如果v后面进行每一个元素free的话,
Memory leak 在哪?
[在 zizhu (windy) 的大作中提到:]
:问题:
:下面的程序有什么问题?
:void foo(void)
:{
:。。。。
: vector<C*> v; //C是一个class
: v.push_back(new C());
:。。。。
:}
:答: 会有memoryleak。
:.......... |
G****n 发帖数: 618 | 5 被free之前出现exception
【在 s***n 的大作中提到】 : 如果v后面进行每一个元素free的话, : Memory leak 在哪? : [在 zizhu (windy) 的大作中提到:] : :问题: : :下面的程序有什么问题? : :void foo(void) : :{ : :。。。。 : : vector<C*> v; //C是一个class : : v.push_back(new C());
|
h*****e 发帖数: 1153 | |
h*******u 发帖数: 15326 | 7 异常都要处理的
程序崩了内存自动回收
【在 G****n 的大作中提到】 : 被free之前出现exception
|
G****n 发帖数: 618 | 8 那只是exit后的情况
★ 发自iPhone App: ChineseWeb 13
【在 h*******u 的大作中提到】 : 异常都要处理的 : 程序崩了内存自动回收
|
a*******g 发帖数: 1221 | 9 void foo(void)
{
。。。。
vector v; //C是一个class
v.push_back(new C());
。。。。
}
答: 如果能保证后来对vector中每一个元素都free,这么写完全没有问题。只有傻逼才
会在new之后忘了delete。
问为什么可以用unique_ptr,而不能用auto_ptr呢?比如
void foo(void)
{
。。。。
vector< unique_ptr > v; //可以
//vector< auto_ptr > v; //不可以
v.push_back(new C());
。。。。
}
答案见二楼的链接。
如果用unique_ptr的话就不用担心new delete之类的问题了。因为在foo调用结束的时
候,unique_str可以保证自动调用delete |
h*******u 发帖数: 15326 | 10 你还想不exit?
这种code不能通过review
【在 G****n 的大作中提到】 : 那只是exit后的情况 : : ★ 发自iPhone App: ChineseWeb 13
|
n*****n 发帖数: 5277 | |
G****n 发帖数: 618 | 12 不是所有的exception遇到了都要exit。
【在 h*******u 的大作中提到】 : 你还想不exit? : 这种code不能通过review
|
h*******u 发帖数: 15326 | 13 所以说了对可能异常要处理好
【在 G****n 的大作中提到】 : 不是所有的exception遇到了都要exit。
|