只是一个设计/优化问题。你什么时候存储指针或对象,为什么?例如,我相信这两个工作(除非编译错误):
class A{
std::unique_ptr<Object> object_ptr;
};
A::A():object_ptr(new Object()){}
class B{
Object object;
};
B::B():object(Object()){}
我相信在堆栈或堆上实例化时会有一个区别?
例如:
int main(){
std::unique_ptr<A> a_ptr;
std::unique_ptr<B> b_ptr;
a_ptr = new A(); //(*object_ptr) on heap, (*a_ptr) on heap?
b_ptr = new B(); //(*object_ptr) on heap, object on heap?
A a; //a on stack, (*object_ptr) on heap?
B b; //b on stack, object on stack?
}
另外,sizeof(A)
应该是 < sizeof(B)
? 还有其他我遗漏的问题吗?(丹尼尔在评论中的相关帖子中提醒了我关于继承问题)
因此,由于堆栈分配通常比堆分配快,但 A 的大小比 B 小,这些折衷是不是即使在使用移动语义的情况下如果不测试性能也无法回答的折衷方案之一?或者一些经验法则什么时候使用一个比另一个更有利?(San Jacinto 纠正了我关于堆栈/堆分配更快,而不是堆栈/堆)
我猜想更多的副本构造会导致相同的性能问题,(3 个副本将〜 3 倍类似的性能损失作为启动第一个实例)。但是移动构造可能更有利的是尽可能使用堆栈???
这是一个相关的问题,但不完全相同。 C++ STL:我应该存储整个对象还是指向对象的指针?
谢谢!