由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - auto_ptr, algorithm 混用问题,大侠们救我。头疼死了!
相关主题
也问个STL的问题, 谢谢老年工程师转行遇到下马威
[合集] 几道面试问题问一个函数指针的问题,c++
auto 很爽STL iterator的疑问
C++ most vexing parse到底怎么回事?[合集] 如何得到一个指向STL元素的指针?
C++是给神仙用的语言容器里边放指针怎么办?
[新手]一直都把C++当Java写,有啥严重不妥?interview question: (RB tree vs. hash table)
C++11里list迭代器判空仍然知道具体的list对象吗?STL里怎样得到map的某个键值对(pair)的指针?
[合集] 再论auto_ptr/SmartPtr和内存泄漏difference between: char** p and char*p[] ??
相关话题的讨论汇总
话题: ptr话题: auto话题: 指针话题: vector话题: algorithm
进入Programming版参与讨论
1 (共1页)
z****e
发帖数: 2024
1
简短节说:
auto_ptr > p=(new vector);
//...something
transform( p->begin(),p->end(),p->begin(),
bind2nd(multiplies(), 10.0) );
//此处看看p.
问题1:发现p并没有失去 ownership,但是还是心虚,需要大牛confirm。
我知道auto_ptr不能作为容器元素,
问题2:但是auto_ptr作为函数参数的时候,往往会失去ownership是吗?
问题3:使用generic algorithm,什么时候auto_ptr会失去ownership 呢?
问题4:那么使用generic algorithm,auto_ptr结合, 例如上面的东东,需要注意什么
呢?
z****e
发帖数: 2024
2
另外一个小问,
如果自己定义的function object超过3个参数的,bind2nd就没法用了,我就用一个
pair把后面两个绑起来,变成2个参数的function object,继续用bind2nd adaptor.
有没有好一点的,或者通用一点的方法呢?
z****e
发帖数: 2024
3
还有一个问题,
一般auto_ptr用的多不多?是不是要像书上说的,养成用它代替指针的习惯?只要速度
允许。
p***o
发帖数: 1252
4

1 自己写个functor
2 用boost::bind
3 等C++0x
4 还是用for循环吧

【在 z****e 的大作中提到】
: 另外一个小问,
: 如果自己定义的function object超过3个参数的,bind2nd就没法用了,我就用一个
: pair把后面两个绑起来,变成2个参数的function object,继续用bind2nd adaptor.
: 有没有好一点的,或者通用一点的方法呢?

p***o
发帖数: 1252
5

什么书这么说?它是说"智能指针"把。
智能指针有很多种,auto_ptr一般用来在同一个函数中自动释放new的东西,传来传去
还是shared_ptr比较保险。

【在 z****e 的大作中提到】
: 还有一个问题,
: 一般auto_ptr用的多不多?是不是要像书上说的,养成用它代替指针的习惯?只要速度
: 允许。

z****e
发帖数: 2024
6
shared_ptr是不是boost里边的?
oh,上帝呀! 我还要去安装boost!这STL还没整明白呢。
一般类的data member是不是设计成auto_ptr比较好?

【在 p***o 的大作中提到】
:
: 什么书这么说?它是说"智能指针"把。
: 智能指针有很多种,auto_ptr一般用来在同一个函数中自动释放new的东西,传来传去
: 还是shared_ptr比较保险。

p***o
发帖数: 1252
7

那你可以先不用整智能指针,先把STL里的container/algorithm搞明白。
智能指针是用来包装new出来的东西的。
一般类的data member你都用new的吗?看起来不大对 ...
基本上你把container都搞明白就没有什么地方需要new了。

【在 z****e 的大作中提到】
: shared_ptr是不是boost里边的?
: oh,上帝呀! 我还要去安装boost!这STL还没整明白呢。
: 一般类的data member是不是设计成auto_ptr比较好?

z****e
发帖数: 2024
8
哦,我这个职能指针就是指向一个vector,而且该指针是一个私有data member。
您说这样设计行不行呢。
多谢了。

【在 p***o 的大作中提到】
:
: 那你可以先不用整智能指针,先把STL里的container/algorithm搞明白。
: 智能指针是用来包装new出来的东西的。
: 一般类的data member你都用new的吗?看起来不大对 ...
: 基本上你把container都搞明白就没有什么地方需要new了。

p***o
发帖数: 1252
9
你为什么要用一个指针指向一个vector?
class A
{
std::vector dbl_vec_;
public:
...
};
这样不好吗?你原来是不是学过java,每个类都要new出来?C++里不是
这么用的。
用STL基本上没有必要用new/malloc,等你非用不可的时候,你就明白
智能指针是啥了 ...

【在 z****e 的大作中提到】
: 哦,我这个职能指针就是指向一个vector,而且该指针是一个私有data member。
: 您说这样设计行不行呢。
: 多谢了。

z****e
发帖数: 2024
10
是啊,你这么一说,我也觉得没必要哈?
如果传这个vector,就用引用,效率和指针是一样的吧?

【在 p***o 的大作中提到】
: 你为什么要用一个指针指向一个vector?
: class A
: {
: std::vector dbl_vec_;
: public:
: ...
: };
: 这样不好吗?你原来是不是学过java,每个类都要new出来?C++里不是
: 这么用的。
: 用STL基本上没有必要用new/malloc,等你非用不可的时候,你就明白

相关主题
[新手]一直都把C++当Java写,有啥严重不妥?老年工程师转行遇到下马威
C++11里list迭代器判空仍然知道具体的list对象吗?问一个函数指针的问题,c++
[合集] 再论auto_ptr/SmartPtr和内存泄漏STL iterator的疑问
进入Programming版参与讨论
p***o
发帖数: 1252
11

嗯,一样

【在 z****e 的大作中提到】
: 是啊,你这么一说,我也觉得没必要哈?
: 如果传这个vector,就用引用,效率和指针是一样的吧?

O*******d
发帖数: 20343
12
我用auto_ptr很多。 但要注意一些细节。
1。auto_ptr一般不要用来做函数参数。 因为ownershi会转移到函数里面去。函数一旦
完成,内存释放,外面的auto_ptr
就成了悬浮的指针了。
2。函数可以return一个auto_ptr。 这种用法比较安全。 一般原则是,从较小的scope
往较大的scope传递,而不是相
反。 所以在函数内部使用时,不要把auto_ptr传到code block里去,但可以反向传递。
3。如果在函数里需要allocate内存,用auto_ptr比较好,一来不会忘记delete,二来
是exception safe。

【在 z****e 的大作中提到】
: 还有一个问题,
: 一般auto_ptr用的多不多?是不是要像书上说的,养成用它代替指针的习惯?只要速度
: 允许。

O*******d
发帖数: 20343
13
vector在引用时效率和指针是不一样的。 vector要把全体数据copy一遍。

【在 z****e 的大作中提到】
: 是啊,你这么一说,我也觉得没必要哈?
: 如果传这个vector,就用引用,效率和指针是一样的吧?

p***o
发帖数: 1252
14
啥?

【在 O*******d 的大作中提到】
: vector在引用时效率和指针是不一样的。 vector要把全体数据copy一遍。
z****e
发帖数: 2024
15
mark!

scope
递。

【在 O*******d 的大作中提到】
: 我用auto_ptr很多。 但要注意一些细节。
: 1。auto_ptr一般不要用来做函数参数。 因为ownershi会转移到函数里面去。函数一旦
: 完成,内存释放,外面的auto_ptr
: 就成了悬浮的指针了。
: 2。函数可以return一个auto_ptr。 这种用法比较安全。 一般原则是,从较小的scope
: 往较大的scope传递,而不是相
: 反。 所以在函数内部使用时,不要把auto_ptr传到code block里去,但可以反向传递。
: 3。如果在函数里需要allocate内存,用auto_ptr比较好,一来不会忘记delete,二来
: 是exception safe。

z****e
发帖数: 2024
16
同,啥?

【在 O*******d 的大作中提到】
: vector在引用时效率和指针是不一样的。 vector要把全体数据copy一遍。
t****t
发帖数: 6806
17
他应该是没看清楚你问什么.

【在 z****e 的大作中提到】
: 同,啥?
v*s
发帖数: 946
18
"你原来是不是学过java,每个类都要new出来?"
让俺笑出声了。 哈哈。

+里不是

【在 p***o 的大作中提到】
: 你为什么要用一个指针指向一个vector?
: class A
: {
: std::vector dbl_vec_;
: public:
: ...
: };
: 这样不好吗?你原来是不是学过java,每个类都要new出来?C++里不是
: 这么用的。
: 用STL基本上没有必要用new/malloc,等你非用不可的时候,你就明白

O*******d
发帖数: 20343
19
vector a;
vector b;
.
.
.
a = b; 这一步把b里边的全部数据copy到a里面了。 a和b没有任何数据共享。

【在 p***o 的大作中提到】
: 啥?
O*******d
发帖数: 20343
20
如果需要把auto_ptr的指针当成函数参数,可以直接使用raw pointer,就是用get()。
这是比较安全的用法。
func(int * pInt)
{
.
.
}
auto_ptr a(new int());
func(a.get());
相关主题
[合集] 如何得到一个指向STL元素的指针?STL里怎样得到map的某个键值对(pair)的指针?
容器里边放指针怎么办?difference between: char** p and char*p[] ??
interview question: (RB tree vs. hash table)C++ pointer problem
进入Programming版参与讨论
t****t
发帖数: 6806
21
that's not called a 引用.
引用 is reference.

【在 O*******d 的大作中提到】
: vector a;
: vector b;
: .
: .
: .
: a = b; 这一步把b里边的全部数据copy到a里面了。 a和b没有任何数据共享。

z****e
发帖数: 2024
22
你是说,只要func里边,不delete,auto_ptr a 在外边仍然有ownership 对吧?因为
不是,release()。
如果func里边delete pInt 了,咋整?外边的 a 咋办?

【在 O*******d 的大作中提到】
: 如果需要把auto_ptr的指针当成函数参数,可以直接使用raw pointer,就是用get()。
: 这是比较安全的用法。
: func(int * pInt)
: {
: .
: .
: }
: auto_ptr a(new int());
: func(a.get());

z****e
发帖数: 2024
23
他说的应该是赋值吧。

【在 t****t 的大作中提到】
: that's not called a 引用.
: 引用 is reference.

t****t
发帖数: 6806
24
赋值也是引用和指针一样.

【在 z****e 的大作中提到】
: 他说的应该是赋值吧。
p***o
发帖数: 1252
25

那说明这个func的设计有问题。除非这个func功能就是释放pInt,要不然
绝对不要在里面delete pInt。

【在 z****e 的大作中提到】
: 你是说,只要func里边,不delete,auto_ptr a 在外边仍然有ownership 对吧?因为
: 不是,release()。
: 如果func里边delete pInt 了,咋整?外边的 a 咋办?

O*******d
发帖数: 20343
26
auto_ptr在函数外面,没有传递进去,用get()还保持有ownership。 如果你
要在函数里边delete那个指针,谁也救不了你。

【在 z****e 的大作中提到】
: 你是说,只要func里边,不delete,auto_ptr a 在外边仍然有ownership 对吧?因为
: 不是,release()。
: 如果func里边delete pInt 了,咋整?外边的 a 咋办?

1 (共1页)
进入Programming版参与讨论
相关主题
difference between: char** p and char*p[] ??C++是给神仙用的语言
C++ pointer problem[新手]一直都把C++当Java写,有啥严重不妥?
A C++ runtime type casting questionC++11里list迭代器判空仍然知道具体的list对象吗?
C++ 科学计算中的常量[合集] 再论auto_ptr/SmartPtr和内存泄漏
也问个STL的问题, 谢谢老年工程师转行遇到下马威
[合集] 几道面试问题问一个函数指针的问题,c++
auto 很爽STL iterator的疑问
C++ most vexing parse到底怎么回事?[合集] 如何得到一个指向STL元素的指针?
相关话题的讨论汇总
话题: ptr话题: auto话题: 指针话题: vector话题: algorithm