为什么这个构造函数被调用两次?

你好世界

我有这个代码:

// Example program
#include <iostream>
#include <string>

class Hello{
    public:
    Hello(){std::cout<<"Hello world!"<<std::endl;}
};

class Base{
    public:
    Base(const Hello &hello){ this->hello = hello;}
    private:
    Hello hello;
};

class Derived : public Base{
    public:
    Derived(const Hello &hello) : Base(hello) {}
};

int main()
{
    Hello hello;
    Derived d(hello);
    return 0;
}

结果打印为:

Hello world!
Hello world!

为什么会发生这种情况?

埃姆莱

它在默认构造hello成员时调用Base(在this->hello = hello;赋值之前)。

使用成员初始化列表来避免这种情况(即hello直接从参数复制构造成员hello):

Base(const Hello &hello) : hello(hello) { }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的构造函数被两次调用

为什么构造函数被两次调用

为什么析构函数被调用两次而构造函数仅被调用一次?

ViewScope构造函数调用了两次,不确定为什么

为什么派生类可以调用基类构造函数两次?

为什么在下面的代码中两次调用了复制构造函数?

为什么 C++ 复制构造函数被调用两次?

为什么 C++ 复制构造函数被调用两次?

重写新运算符时,C ++类构造函数被调用两次-为什么

为什么在我的程序中两次调用构造函数?

为什么在堆数组初始化中调用了两次复制构造函数?

为什么我的C ++程序的副本构造函数被调用两次?

为什么在这段代码片段中复制构造函数被调用了两次?

为什么在Java中两次使用构造函数

Part的构造函数被两次调用

为什么异步函数被调用两次?

为什么代码两次调用析构函数?

为什么我的函数在React中被两次调用?

为什么析构函数被调用两次?

为什么析构函数调用两次表单?

为什么我的 python 函数被调用两次?

为什么在此链表实现中,此C ++构造函数在同一内存位置被调用两次?

为什么在 C++ 中重载后增量运算符会调用构造函数两次?

为什么这个 api 调用在 React 中被调用两次?

为什么类的构造函数被调用了四次,而在程序即将结束的时候,析构函数只被调用了两次?

为什么ngOnInit被调用两次?

为什么 OnCollisionEnter 被调用两次?

为什么“ GetFormat”被调用两次?

为什么attributeChangedCallback被调用两次?