相关疑难解决方法(0)

什么是复制省略和返回值优化?

什么是复制省略?什么是(命名)返回值优化?他们意味着什么?

它们会在什么情况下发生?有什么限制?

c++ optimization c++-faq return-value-optimization copy-elision

350
推荐指数
4
解决办法
7万
查看次数

复制elision用于传值参数

特定

struct Range{
    Range(double from, double to) : from(from), to(to) {}
    double from;
    double to;
};

struct Box{
    Box(Range x, Range y) : x(x), y(y) {}
    Range x;
    Range y;
};
Run Code Online (Sandbox Code Playgroud)

假设我们跑了Box box(Range(0.0,1.0),Range(0.0,2.0)).

启用优化的现代编译器是否可以避免Range在此构造期间完全复制对象?(即构建Range内部的对象box以开始?)

c++ pass-by-value copy-elision

17
推荐指数
3
解决办法
3167
查看次数

在C++中解决复制语义问题

请考虑以下代码:

class A
{

};

int main()
{
    std::vector<A> test;
    test.push_back(A());
}
Run Code Online (Sandbox Code Playgroud)

构造函数和析构函数将被调用两次,内存将被分配两次并且对象将被复制,现在不仅可能对性能有害,而且还可能导致运行时错误,特别是如果在析构函数中进行了一些清理.我通常会解决这个问题的方法是创建一个指针向量:

std::vector<A*> test;
test.push_back(new A());
Run Code Online (Sandbox Code Playgroud)

我的问题是双重的,这是一种常见的做法,是不是很好的做法?或者,还有更好的方法?如果这是一个欺骗请告诉我,我会关闭这个问题,但我找不到任何搜索.

c++ c++11 c++14

14
推荐指数
1
解决办法
973
查看次数