zoukankan      html  css  js  c++  java
  • 一个关于C++拷贝构造的bug

    #include <iostream>
    using namespace std;
    
    class A {
    public:
        A(int a) {};
        A(const A&) = default;
    }; 
    
    class B : public A{
    public:
        B(int b) : A(b) {};
        B(const A& a) : A(a){
            cout << "B copy construction" << endl;
        };
    //B(const B&) = delete; };
    class C : public A{ public: C(int c) : A(c) {}; C(const A& a) : A(a) { cout << "C copy construction" << endl; }; }; int main() { B b1(1); C c1(1); B b2(b1); B b3(c1); system("pause"); return 0; }

    用C对象构造B对象是可以的,但是为啥用B对象构造B就没有输出“B copy construction”呢?原来B(const A& a) 并不被认为是拷贝构造函数,编译器还会生成默认的B(const B&)拷贝构造,B b2(b1)实际调用的是B(const B&),而不是声明的B(const A& a)函数。这时如果禁用默认拷贝构造B(const B&) = delete;就会发现编译不过。

  • 相关阅读:
    第二阶段冲刺记录八
    用户体验评价
    找水王
    第二阶段冲刺记录七
    第二阶段冲刺记录六
    第14周学习进度
    第二阶段冲刺记录五
    第二阶段冲刺记录四
    第一阶段意见评论
    IP协议号大全
  • 原文地址:https://www.cnblogs.com/redips-l/p/10619375.html
Copyright © 2011-2022 走看看