0

我了解auto_ptrC++03 中的工作原理。它基于这个技巧。当编写这样的代码时,该技巧使用用户定义的转换将指针从一个对象窃取到另一个对象auto_int p(auto_int(new int()));。但是,我在这方面有几个问题。

  1. 为什么不调用编译器生成的 copy-ctor?
  2. 为什么用户定义的转换优先于编译器生成的复制ctor?
  3. 是否有编译器生成的 copy-ctor 开头?
  4. 如果不是,什么语言规则禁止它?
4

1 回答 1

0

为什么不调用编译器生成的 copy-ctor?

因为该类已经提供了一个复制构造函数,一个仍然有效的可变构造函数,所以编译器不会生成一个默认构造函数。

为什么用户定义的转换优先于编译器生成的复制ctor?

没有编译器生成的复制构造函数。

是否有编译器生成的 copy-ctor 开头?

最后!不,没有。

如果不是,什么语言规则禁止它?

这是 12.8.2:

类 X 的非模板构造函数是复制构造函数,如果它的第一个参数是 X&、const X&、volatile X& 或 const volatile X& 类型,并且没有其他参数,或者所有其他参数都有默认参数。

和 12.8.4:

如果类定义没有显式声明复制构造函数,则隐式声明。

于 2012-05-25T21:07:22.870 回答