【发布时间】:2022-12-05 18:37:24
【问题描述】:
我想要一个类 C,这样 C 的实例将 std::vector<int> 作为私有成员。现在 C 的许多实例(但不是全部)将共享该向量,并且为每个实例保留一个副本是我想要避免的。
例如,如果这个向量是一个整数,我可以为 C 创建一个模板类,并像这样:
template <int N>
class C {
// something
};
如果我希望所有实例共享该向量而不是某些实例,那么我会将变量声明为 static
class C {
static std::vector<int> _vec;
我正在寻找的是中间的东西。例如,我可以将 shared_ptr 保留为私有非静态成员,如
class C {
std::shared_ptr<std::vector<int>> _vec;
}
这将照顾对象的生命周期,维护共享所有权的一些开销以及每个实例的额外指针。我可以保留一个引用,让实例的创建者处理生命周期,但避免 shared_ptr 的开销。这个设计问题有更好的方法吗?
【问题讨论】:
-
如果你把它做成一个模板,那么它就不是同一个类的不同实例,但是
C<1>和C<2>是不同的类。你实际上会让一个类的所有实例“共享”同一个整数。但是,int无法修改,所以我看不出它与其他替代方案有何可比性。无论如何,细节/背景/要求太少,无法说明什么是“更好”的设计
标签: c++ smart-pointers