class C { ... };
std::vector<C> vc;
std::vector<C*> pvc;
std::vector<std::unique_ptr<C>> upvc;
根据C的大小,存储值的方法和存储指针的方法中哪种更有效率是不同的。
在32位和64位平台上,是否有可能大致知道它的大小?
class C { ... };
std::vector<C> vc;
std::vector<C*> pvc;
std::vector<std::unique_ptr<C>> upvc;
根据C的大小,存储值的方法和存储指针的方法中哪种更有效率是不同的。
在32位和64位平台上,是否有可能大致知道它的大小?
unique
指针的实现方式。还有其他智能指针,而不仅仅是unique_ptr
。您还可以查看编译器生成的汇编语言清单。 - Thomas Matthewsunique_ptr
不会比手动内存管理的裸指针慢。 - D Drmmr对于一个普通数据类型(Plain Old Data,POD),该类型的向量总是比指针向量更有效,至少在 sizeof(POD) > sizeof(POD*) 之前。
几乎总是如此,即使到 sizeof(POD) > 2 * sizeof(POD*),也是如此,因为它具有优越的内存局部性和更低的总内存使用量,与动态分配要指向的对象时相比。
这种分析将保持真实,直到sizeof(POD)越过您架构、编译器和用法的某个阈值,您需要通过基准测试来发现。以上仅对POD类型的大小设置下限。
关于所有非POD类型,很难说出任何明确的结论,因为它们的操作(例如默认构造函数,复制构造函数,赋值等)可能与POD相同或者任意昂贵。