gpt4 book ai didi

c++ - 为什么我需要在 QVector 中有一个默认构造函数?

转载 作者:行者123 更新时间:2023-11-30 03:18:54 26 4
gpt4 key购买 nike

我在编译以下内容时遇到问题:

#include <QVector>
#include <QDebug>
#include <vector>

class item
{
int var;
public:
//Without default constructor this program will not compile
//item(){}

item(int value)
{
var = value;
}
int getVar()
{
return var;
}
};

int main()
{
//This code will not compile
QVector<item> y;
y.append(item(1));
qDebug() << y[0].getVar();

//std::vector however will work despite an absence of a default contructor
std::vector<item> z;
z.push_back(item(1));
qDebug() << z.at(0).getVar();

return 0;
}

准确地说,追加行不会编译。

为什么在这种情况下 item 必须有一个默认构造函数?

最佳答案

std::vector 工作方式不同的原因在于,在 vector 中,分配原始未初始化内存,然后在需要时调用复制构造函数进行复制.此过程不需要为 resize() 调用默认构造函数。这就是为什么不存在对默认构造函数的依赖性。

有关详细信息,请参阅 AnT的回答here .

QVector 要求类型是默认可构造的,因为内部函数 realloc() 的实现方式。

来源:Understanding the Qt containers

关于c++ - 为什么我需要在 QVector<MyClass> 中有一个默认构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54245949/

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