gpt4 book ai didi

c++ - 绕过 C++ 中的复制语义

转载 作者:IT老高 更新时间:2023-10-28 22:34:58 25 4
gpt4 key购买 nike

请考虑以下代码:

class A
{

};

int main()
{
std::vector<A> test;
test.push_back(A());
}

构造函数和析构函数将被调用两次,内存将被分配两次,对象将被复制,现在这不仅可能对性能不利,还可能导致运行时错误,尤其是在进行一些清理时析构函数。我通常解决这个问题的方法是只创建一个指针 vector :

std::vector<A*> test;
test.push_back(new A());

我的问题有两个,这是常见的做法还是好的做法?或者,还有更好的方法?如果这是一个骗局,请告诉我,我会关闭问题,但我在搜索中找不到任何内容。

最佳答案

使用 emplace_back .

std::vector<A> test;
test.emplace_back();
//test.emplace_back(constructor, parameters);

这样,A 将在原地构造,因此不会发生复制或移动。

编辑:澄清对问题的评论 - 不,如果您将它传递给临时,这不会从 push_back 改变。例如,

test.emplace_back(A{});

将在 C++11 中导致临时 A 被构造、移动和销毁,就像您使用 push_back 一样。

关于c++ - 绕过 C++ 中的复制语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40323722/

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