gpt4 book ai didi

派生类的c++ vector 仅调用一次构造函数

转载 作者:太空狗 更新时间:2023-10-29 23:37:25 41 4
gpt4 key购买 nike

如果我创建一个派生类的 size 2 std::vector,构造函数只被调用一次。如果我创建一个基类的大小为 2 的 vector ,构造函数将被调用两次。

我通常不会发布重复问题的完整代码,但在这种情况下,它可以做得很短:

#include <iostream>
#include <vector>

class Base {
public:
Base() { std::cout << "base constructor" << std::endl; }
virtual ~Base() {}
};

class Derived : public Base {
public:
Derived() { std::cout << "derived constructor" << std::endl; }
};

int main() {
std::vector<Base> base(2);
std::cout << "----------------" << std::endl;
std::vector<Derived> derived(2);

return 0;
}

以上对我的输出是:

base constructor
----------------
base constructor
derived constructor

为什么输出不是以下内容:

base constructor
base constructor
----------------
derived constructor
derived constructor

我在 Linux 上使用 gcc 4.5.2。

最佳答案

您是在自欺欺人:派生对象的单个默认构造调用两个构造函数。

现在,您没有看到的是复制构造函数,它实际上在两种情况下都被调用了两次。

您正在调用的 vector 的构造函数为其值类型创建一个默认构造,然后将其复制到每个元素中:

//std::vector<Derived> v(2);

std::vector<Derived> v(2, Derived()); // same thing!

关于派生类的c++ vector 仅调用一次构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7296708/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com