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

标签 c++ copy-constructor

在对 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/

相关文章:

c++ - 未调用模板类复制构造函数

c++ - AT命令响应解析器

c++ 如何将模板应用于模板类的子/友元?

c++ - 当我尝试运行我的 C++ 程序时收到警告

java - 关于Java的复制构造函数问题

C++ 复制构造函数,赋值 'operator='

c++ - 我可以鼓励 g++ 内联一个返回符号的开关吗?

c++ - 让 WinVerifyTrust 使用目录签名文件,例如 cmd.exe

c++ - 在 C++ 中为没有默认构造函数的成员复制构造函数

c++ - 既然你可以在 C++ 中以两种方式声明一个复制构造函数,那哪种方式是正确的?