由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 还有一个问题
相关主题
[合集] 关于template和inheritance的问题请教发个初级面试题
一个关于C++ template和overload的问题最初级的白痴C++问题
What is wrong with the constructor (or the code)?两个继承问题
发现Windows SDK的src和lib不一样正常嘛为什么我看不懂下面的code,是不是水平还不够?
问行C++代码g++-2.95 -> g++-3.3/3.4
a simple question for C++ class请教函数 INIT 怎么能free memory
请问一个exception题目C++疑问
关于 VC++ vitual, reload 和 derive的一个问题...What happens when recursion functions are declared inline?
相关话题的讨论汇总
话题: ptr话题: auto话题: newt话题: pc
进入Programming版参与讨论
1 (共1页)
N***m
发帖数: 4460
1
看来基本概念要深抓:)
我从effective c++上看得,自己略为改动一下用auto_ptr,
可是我必须加上 最后一句 pc = ... 不然double free error.
但是这样写也太ugly了。又没有啥好办法?
另外,书上的member function template我这里编译不通过阿。
又没有啥解决的办法啊?我用的gcc 4.4。
注释掉的member function template as follows:
// template
// operator SmartPointer()
// {
// return SmartPointer(ptr);
// }
另外还有specialized的version,都不work。
==================================================
#include
#include
using namespace std;
class MusicProduct {
pr
X****r
发帖数: 3557
2
Play(auto_ptr(&(*pc)),3);
Now think about why you use "&(*pc)", and what it actually does.

【在 N***m 的大作中提到】
: 看来基本概念要深抓:)
: 我从effective c++上看得,自己略为改动一下用auto_ptr,
: 可是我必须加上 最后一句 pc = ... 不然double free error.
: 但是这样写也太ugly了。又没有啥好办法?
: 另外,书上的member function template我这里编译不通过阿。
: 又没有啥解决的办法啊?我用的gcc 4.4。
: 注释掉的member function template as follows:
: // template
: // operator SmartPointer()
: // {

N***m
发帖数: 4460
3
我改成Play(auto_ptr(pc),3),好了。
尽管我不知道为什么:)

【在 X****r 的大作中提到】
: Play(auto_ptr(&(*pc)),3);
: Now think about why you use "&(*pc)", and what it actually does.

N***m
发帖数: 4460
4
我”猜“:
因为compiler 看到auto_ptr就去想办法转换,所以
pc被转换成MusicProduct*传递给auto_ptr构建anonymous variable?

【在 X****r 的大作中提到】
: Play(auto_ptr(&(*pc)),3);
: Now think about why you use "&(*pc)", and what it actually does.

I*****y
发帖数: 602
5
auto_ptr不适合做函数参数传递吧,这样ownership就被传寄去了。
还是用share_ptr比较保险。
另外auto_ptr和share_ptr基本可以按照指针类型数据看待,不需要引用传递,
当然引用传递也没有错。

【在 N***m 的大作中提到】
: 看来基本概念要深抓:)
: 我从effective c++上看得,自己略为改动一下用auto_ptr,
: 可是我必须加上 最后一句 pc = ... 不然double free error.
: 但是这样写也太ugly了。又没有啥好办法?
: 另外,书上的member function template我这里编译不通过阿。
: 又没有啥解决的办法啊?我用的gcc 4.4。
: 注释掉的member function template as follows:
: // template
: // operator SmartPointer()
: // {

N***m
发帖数: 4460
6
thanks for your input.
你说得对的,我还是用share_ptr算了。

【在 I*****y 的大作中提到】
: auto_ptr不适合做函数参数传递吧,这样ownership就被传寄去了。
: 还是用share_ptr比较保险。
: 另外auto_ptr和share_ptr基本可以按照指针类型数据看待,不需要引用传递,
: 当然引用传递也没有错。

m*****s
发帖数: 2
7
Play(auto_ptr(&(*pc)),3);
is equal to
Play(auto_ptr(pc.get()),3);
a temp auto_ptr is constructed which owns the underlying pointer
that pc owns. So you get double free.
Play(auto_ptr(pc),3);
calls the cctor
auto_ptr(auto_ptr<_Ty>& _Right) _THROW0()
{ // construct by assuming pointer from _Right auto_ptr
}
the ownership is actually transfered to the temp auto_ptr.
So you avoid the double free, but the pc is released, which
may not be what you expected.
N***m
发帖数: 4460
8
谢谢!
似乎pc.get是win下面的?

【在 m*****s 的大作中提到】
: Play(auto_ptr(&(*pc)),3);
: is equal to
: Play(auto_ptr(pc.get()),3);
: a temp auto_ptr is constructed which owns the underlying pointer
: that pc owns. So you get double free.
: Play(auto_ptr(pc),3);
: calls the cctor
: auto_ptr(auto_ptr<_Ty>& _Right) _THROW0()
: { // construct by assuming pointer from _Right auto_ptr
: }

1 (共1页)
进入Programming版参与讨论
相关主题
What happens when recursion functions are declared inline?问行C++代码
two c++ interview questions! (转载)a simple question for C++ class
请教一个作用域的问题请问一个exception题目
为什么不能成功排序关于 VC++ vitual, reload 和 derive的一个问题...
[合集] 关于template和inheritance的问题请教发个初级面试题
一个关于C++ template和overload的问题最初级的白痴C++问题
What is wrong with the constructor (or the code)?两个继承问题
发现Windows SDK的src和lib不一样正常嘛为什么我看不懂下面的code,是不是水平还不够?
相关话题的讨论汇总
话题: ptr话题: auto话题: newt话题: pc