B*******g 发帖数: 1593 | 1 auto_ptr test(new Base);--1
auto_ptr test= new Base;--2
有啥区别么?
在我的机器上2在进入
void operator delete(
void *pUserData
)
时 pUserData是非法的(但是非NULL) 1 就没问题
报错的地方是assertion |
N***m 发帖数: 4460 | 2 1 uses copy constructor
2 uses assigment copy constrcutor
do not know other stuffs.
【在 B*******g 的大作中提到】 : auto_ptr test(new Base);--1 : auto_ptr test= new Base;--2 : 有啥区别么? : 在我的机器上2在进入 : void operator delete( : void *pUserData : ) : 时 pUserData是非法的(但是非NULL) 1 就没问题 : 报错的地方是assertion
|
B*******g 发帖数: 1593 | 3 ahh? U sure?
【在 N***m 的大作中提到】 : 1 uses copy constructor : 2 uses assigment copy constrcutor : do not know other stuffs.
|
N***m 发帖数: 4460 | 4 不sure,我是新手。
【在 B*******g 的大作中提到】 : ahh? U sure?
|
z****e 发帖数: 2024 | 5 2是错误的。
因为:
explicit auto_ptr(T* p=0);
【在 B*******g 的大作中提到】 : auto_ptr test(new Base);--1 : auto_ptr test= new Base;--2 : 有啥区别么? : 在我的机器上2在进入 : void operator delete( : void *pUserData : ) : 时 pUserData是非法的(但是非NULL) 1 就没问题 : 报错的地方是assertion
|
B*******g 发帖数: 1593 | 6 2 启用的是另一个ctor
auto_ptr(auto_ptr_ref<_Ty> _Right) _THROW0()
如果要阻止用户用2来声明+初始化一个auto_ptr的话我觉得办法应该是有的,但是别人
没这么做我也
知道2的话里面_Myptr的值很怪,不过任何操作都没问题。
【在 z****e 的大作中提到】 : 2是错误的。 : 因为: : explicit auto_ptr(T* p=0);
|
B*******g 发帖数: 1593 | 7 那再问问你
Base * t1(new Base);
Base * t2 = new Base;
是不是也用到了copy constructor copy assignment operator?
【在 N***m 的大作中提到】 : 不sure,我是新手。
|
z****e 发帖数: 2024 | 8 你这个是标准库的STL,还是VC下边的?
【在 B*******g 的大作中提到】 : 2 启用的是另一个ctor : auto_ptr(auto_ptr_ref<_Ty> _Right) _THROW0() : 如果要阻止用户用2来声明+初始化一个auto_ptr的话我觉得办法应该是有的,但是别人 : 没这么做我也 : 知道2的话里面_Myptr的值很怪,不过任何操作都没问题。
|
z****e 发帖数: 2024 | 9 只要ctor是explicit的话,2 就完了。
我用g++ 4.2.4, 这个是不行的。
【在 B*******g 的大作中提到】 : 2 启用的是另一个ctor : auto_ptr(auto_ptr_ref<_Ty> _Right) _THROW0() : 如果要阻止用户用2来声明+初始化一个auto_ptr的话我觉得办法应该是有的,但是别人 : 没这么做我也 : 知道2的话里面_Myptr的值很怪,不过任何操作都没问题。
|
z****e 发帖数: 2024 | 10 你这个是指针初始化,t1,t2都是pod,它们的ctor都是trivial的。
【在 B*******g 的大作中提到】 : 那再问问你 : Base * t1(new Base); : Base * t2 = new Base; : 是不是也用到了copy constructor copy assignment operator?
|
|
|
z****e 发帖数: 2024 | 11 explicit auto_ptr_ref(_Tp1* __p): _M_ptr(__p) { }
这个是我的源码。
auto_ptr_ref<_Ty>也无法自动转化。
所以2是编译错误。
你要是2能过编译,让我知道以下是哪家的编译器好吧。
【在 B*******g 的大作中提到】 : 2 启用的是另一个ctor : auto_ptr(auto_ptr_ref<_Ty> _Right) _THROW0() : 如果要阻止用户用2来声明+初始化一个auto_ptr的话我觉得办法应该是有的,但是别人 : 没这么做我也 : 知道2的话里面_Myptr的值很怪,不过任何操作都没问题。
|
N***m 发帖数: 4460 | 12 大侠们写东西总是这么让人看不懂啊
【在 z****e 的大作中提到】 : 你这个是指针初始化,t1,t2都是pod,它们的ctor都是trivial的。
|
B*******g 发帖数: 1593 | 13 VC下面的
你说explicit ctor 编译报错的话倒也合理
auto_ptr test= new Base;
应该是试图从Base* implicitly构建一个 auto_ptr 然后用这个来初始化test (
就是
copy ctor了)
不过我才发现
struct auto_ptr_ref
{ // proxy reference for auto_ptr copying
explicit auto_ptr_ref(_Ty *_Right)
: _Ref(_Right)
{ // construct from generic pointer to auto_ptr
ptr
}
_Ty *_Ref; // generic pointer to auto_ptr ptr
};
auto_ptr_ref的构造函数也是explicit的。。那之前它如何implicitly构建了
auto_ptr_ref然后调用auto_ptr(auto_ptr_
【在 z****e 的大作中提到】 : 你这个是标准库的STL,还是VC下边的?
|
B*******g 发帖数: 1593 | 14 我觉得Notam理解的不太对 所以让他再想想
你这个trivial啥意思?因为是pod所以ctor都不生成default的了? 如果是non-pod呢?
【在 z****e 的大作中提到】 : 你这个是指针初始化,t1,t2都是pod,它们的ctor都是trivial的。
|
t****t 发帖数: 6806 | 15 neither of them use copy ctor or assignment operator (there is no such thing
"assignment copy constructor").
1 use explicit ctor with regular pointer parameter. 2 is illegal, VC should
not allow it.
【在 N***m 的大作中提到】 : 1 uses copy constructor : 2 uses assigment copy constrcutor : do not know other stuffs.
|