特定
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以开始?)
请考虑以下代码:
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)
我的问题是双重的,这是一种常见的做法,是不是很好的做法?或者,还有更好的方法?如果这是一个欺骗请告诉我,我会关闭这个问题,但我找不到任何搜索.