我了解auto_ptr
C++03 中的工作原理。它基于这个技巧。当编写这样的代码时,该技巧使用用户定义的转换将指针从一个对象窃取到另一个对象auto_int p(auto_int(new int()));
。但是,我在这方面有几个问题。
- 为什么不调用编译器生成的 copy-ctor?
- 为什么用户定义的转换优先于编译器生成的复制ctor?
- 是否有编译器生成的 copy-ctor 开头?
- 如果不是,什么语言规则禁止它?
我了解auto_ptr
C++03 中的工作原理。它基于这个技巧。当编写这样的代码时,该技巧使用用户定义的转换将指针从一个对象窃取到另一个对象auto_int p(auto_int(new int()));
。但是,我在这方面有几个问题。
为什么不调用编译器生成的 copy-ctor?
因为该类已经提供了一个复制构造函数,一个仍然有效的可变构造函数,所以编译器不会生成一个默认构造函数。
为什么用户定义的转换优先于编译器生成的复制ctor?
没有编译器生成的复制构造函数。
是否有编译器生成的 copy-ctor 开头?
最后!不,没有。
如果不是,什么语言规则禁止它?
这是 12.8.2:
类 X 的非模板构造函数是复制构造函数,如果它的第一个参数是 X&、const X&、volatile X& 或 const volatile X& 类型,并且没有其他参数,或者所有其他参数都有默认参数。
和 12.8.4:
如果类定义没有显式声明复制构造函数,则隐式声明。