gpt4 book ai didi

c++ - 我在这段代码中的哪个位置调用了复制构造函数?

转载 作者:太空宇宙 更新时间:2023-11-03 10:33:56 28 4
gpt4 key购买 nike

在对 this question 的回答中我被告知我的问题在于在下面的代码中调用复制构造函数。但是,我只是看不到它在哪里被调用。我没有在任何地方做类似 agents[1] = agents[0]; 的事情,尽管显然我不明白某些事情。这种复制发生在哪里?我该如何更改它以便每次都创建新对象?

我去过

int main()
{
Level* level;
std::vector<Agent> agents;

level = new Level(agents);

for (int i = 0; i < 1; i++) // this will be more than 1 in the future.
{
agents.push_back(Agent(100, *level, agents, level->Pickups(), D3DXCOLOR(1.0F, 0.4f, 0.4f, 1.0f)));
}

delete level;

}

最佳答案

正如其他人所说,push_back将在 vector 中插入一个拷贝。

如果您的编译器支持某些 C++11,则您可以通过将对象直接构建到 vector 中来避免此复制。新emplace_back函数执行此操作:

agents.emplace_back(100, *level, agents, level->Pickups(), D3DXCOLOR(1.0F, 0.4f, 0.4f, 1.0f));

此外,如果编译器支持 C++11 移动语义,push_back如果移动构造函数可用于 Agent,将执行移动操作而不是复制操作,因为您正在临时传递它。

关于c++ - 我在这段代码中的哪个位置调用了复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8399831/

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