由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 容器里边放指针怎么办?
相关主题
求助,如何才能将一个c++对象封装成一个函数指针。用STL map的时候怎么自己定义大小比较的关系
access function static variable问个C++中重复删除指针的问题
C++多线程的选择[合集] 大家看看我这个C++ STL Functor那里写错了
容器中放置智能指针一问请教一个boost::bind的问题
about STL functor and function pointers对STL的set比较熟悉的进来看看
delete sheets from Excel workbook in C# (转载)C++ STL 的问题
c的函数指针能不能弄得像matlab的function handle一样?一个C#使用C++.NET类库的问题
C++的smart pointer注定是个二流的东西这里的人用BOOST都是用来做什么?
相关话题的讨论汇总
话题: 容器话题: 指针话题: wrapper话题: delete话题: int
进入Programming版参与讨论
1 (共1页)
z****e
发帖数: 2024
1
请大侠讲讲,
如果容器里边放指针的话,需要注意什么?
如果不是auto_ptr,就一般指针,有什么需要注意的么?
比如copy什么的,是不是会出现很多share onwership的情况?怎么解决呢?
t****t
发帖数: 6806
2
首先容器里不能放auto_ptr. 一定会出问题. STL container对元素的要求是
assignable. 基于这个理由, auto_ptr和valarray都不能作为STL container的元素
其次就是ownership要注意了. 一般指针没有ownership的说法, 但你自己心里要有数,
ownership是不是这个container. 如果是, 那么在erase, pop, pop_back, dtor等地方
要记得delete. 如果不是, 那就所有的地方都没有delete.
放shared_ptr就没有问题了. shared_ptr是assignable的, 所以不用你自己管.

【在 z****e 的大作中提到】
: 请大侠讲讲,
: 如果容器里边放指针的话,需要注意什么?
: 如果不是auto_ptr,就一般指针,有什么需要注意的么?
: 比如copy什么的,是不是会出现很多share onwership的情况?怎么解决呢?

z****e
发帖数: 2024
3
放指针要自己delete了!
这个和容器说不需要delete不是矛盾了?
不过想想也觉得是要自己显式的delete一下才好哈?
另外能不能容器里放引用呢?

,

【在 t****t 的大作中提到】
: 首先容器里不能放auto_ptr. 一定会出问题. STL container对元素的要求是
: assignable. 基于这个理由, auto_ptr和valarray都不能作为STL container的元素
: 其次就是ownership要注意了. 一般指针没有ownership的说法, 但你自己心里要有数,
: ownership是不是这个container. 如果是, 那么在erase, pop, pop_back, dtor等地方
: 要记得delete. 如果不是, 那就所有的地方都没有delete.
: 放shared_ptr就没有问题了. shared_ptr是assignable的, 所以不用你自己管.

z****e
发帖数: 2024
4
for_each (myvector.begin(), myvector.end(), delete);
那个delete直接作为function object传入?
z****e
发帖数: 2024
5
再次阅读,突然发现你这个回复居然没有一句是废话。

,

【在 t****t 的大作中提到】
: 首先容器里不能放auto_ptr. 一定会出问题. STL container对元素的要求是
: assignable. 基于这个理由, auto_ptr和valarray都不能作为STL container的元素
: 其次就是ownership要注意了. 一般指针没有ownership的说法, 但你自己心里要有数,
: ownership是不是这个container. 如果是, 那么在erase, pop, pop_back, dtor等地方
: 要记得delete. 如果不是, 那就所有的地方都没有delete.
: 放shared_ptr就没有问题了. shared_ptr是assignable的, 所以不用你自己管.

t****t
发帖数: 6806
6
没人说容器不需要delete吧. 容器里如果放的是正常的object, 那跟用auto object一
样, 不需要delete. 如果放的是正常的指针, 那指针需要delete, 容器里的指针也需要
delete.
容器里不能放引用.

【在 z****e 的大作中提到】
: 放指针要自己delete了!
: 这个和容器说不需要delete不是矛盾了?
: 不过想想也觉得是要自己显式的delete一下才好哈?
: 另外能不能容器里放引用呢?
:
: ,

t****t
发帖数: 6806
7
好象是不行的. 在c++0x的lambda function出来之前, for_each并不是一个很好用的东
西.

【在 z****e 的大作中提到】
: for_each (myvector.begin(), myvector.end(), delete);
: 那个delete直接作为function object传入?

t****t
发帖数: 6806
8
不过你可以用std::tr1::reference_wrapper来包装一个引用, make it assignable
and copyconstructable.

【在 t****t 的大作中提到】
: 没人说容器不需要delete吧. 容器里如果放的是正常的object, 那跟用auto object一
: 样, 不需要delete. 如果放的是正常的指针, 那指针需要delete, 容器里的指针也需要
: delete.
: 容器里不能放引用.

z****e
发帖数: 2024
9
回去学习。
这个要看。

【在 t****t 的大作中提到】
: 不过你可以用std::tr1::reference_wrapper来包装一个引用, make it assignable
: and copyconstructable.

O*******d
发帖数: 20343
10
容器不能放reference,因为reference需要在产生时就initialize。例如,
vectora(5) 无法生成。 同样的道理还有 new int &[5];

【在 z****e 的大作中提到】
: 放指针要自己delete了!
: 这个和容器说不需要delete不是矛盾了?
: 不过想想也觉得是要自己显式的delete一下才好哈?
: 另外能不能容器里放引用呢?
:
: ,

相关主题
delete sheets from Excel workbook in C# (转载)用STL map的时候怎么自己定义大小比较的关系
c的函数指针能不能弄得像matlab的function handle一样?问个C++中重复删除指针的问题
C++的smart pointer注定是个二流的东西[合集] 大家看看我这个C++ STL Functor那里写错了
进入Programming版参与讨论
z****e
发帖数: 2024
11
恩,看来常量reference都不可以呀,因为连个能attach的临时变量都没有。

【在 O*******d 的大作中提到】
: 容器不能放reference,因为reference需要在产生时就initialize。例如,
: vectora(5) 无法生成。 同样的道理还有 new int &[5];

d****p
发帖数: 685
12
You cannot use std::vector. But you can use std::vector reference_wrapper >.
So
int i = 9;
int& j = i;
std::vector > myvec;
myvec.push_back(boost::reference_wrapper(i);
myvec.push_back(boost::reference_wrapper(j);
++i;
// now both elements in vector become 10.
Basically it is a wrapper of a pointer which always points to an initialized
variable (not out of scope).

【在 z****e 的大作中提到】
: 恩,看来常量reference都不可以呀,因为连个能attach的临时变量都没有。
d****p
发帖数: 685
13
I think it is Ok, although not as handy as BOOST_FOREACH, which really
achieves the level of expressiveness
as Python and Perl.
The only inconvenience for using std::for_each is you have to explicitly
define your functor - for really simple
tasks it looks an overkill compared with a hand written loop. I however
really hate for-iterator stuff - in a
team environment other people may get lazy and modify the loop in a way that
readability will be harmed.
So, using high level construct like for_each

【在 t****t 的大作中提到】
: 好象是不行的. 在c++0x的lambda function出来之前, for_each并不是一个很好用的东
: 西.

h*****0
发帖数: 4889
14
这东西跟指针有啥区别?

【在 t****t 的大作中提到】
: 不过你可以用std::tr1::reference_wrapper来包装一个引用, make it assignable
: and copyconstructable.

X****r
发帖数: 3557
15
不能赋NULL,不能(直接)进行算术运算。

【在 h*****0 的大作中提到】
: 这东西跟指针有啥区别?
l******e
发帖数: 12192
16
这种情况,还是用boost的ptr_container好

,

【在 t****t 的大作中提到】
: 首先容器里不能放auto_ptr. 一定会出问题. STL container对元素的要求是
: assignable. 基于这个理由, auto_ptr和valarray都不能作为STL container的元素
: 其次就是ownership要注意了. 一般指针没有ownership的说法, 但你自己心里要有数,
: ownership是不是这个container. 如果是, 那么在erase, pop, pop_back, dtor等地方
: 要记得delete. 如果不是, 那就所有的地方都没有delete.
: 放shared_ptr就没有问题了. shared_ptr是assignable的, 所以不用你自己管.

1 (共1页)
进入Programming版参与讨论
相关主题
这里的人用BOOST都是用来做什么?about STL functor and function pointers
C++ Q02:delete sheets from Excel workbook in C# (转载)
C++容器放入对象或指针c的函数指针能不能弄得像matlab的function handle一样?
C++11 native thread问题C++的smart pointer注定是个二流的东西
求助,如何才能将一个c++对象封装成一个函数指针。用STL map的时候怎么自己定义大小比较的关系
access function static variable问个C++中重复删除指针的问题
C++多线程的选择[合集] 大家看看我这个C++ STL Functor那里写错了
容器中放置智能指针一问请教一个boost::bind的问题
相关话题的讨论汇总
话题: 容器话题: 指针话题: wrapper话题: delete话题: int