【问题标题】:Does the class object grows in size as its private members grow?类对象的大小是否随着其私有成员的增长而增长?
【发布时间】:2019-10-06 06:02:07
【问题描述】:

我正在为我的 SLAM 算法编写一个类,这是我的第一个大型 C++ 项目! 我记得std::unique_ptr 应该在我想保留一些应该具有动态内存、一个所有者和较长生命周期的对象时使用。因此,当设计一个特定的类时,它的对象只被创建一次并且应该有一个全局生命周期(它是保存映射的核心类对象)。所以我的想法是创建将保存该对象的 std::unique_ptr:

class Backend
{
private:
    std::vector<double> values;
    /// some members
public:
    Backend() : values{0} {}
    ~Backend(){}
    // some functions
};

auto backend_ptr = std::make_unique(Backend());

所以我的问题是:如果我超时增加其私人成员values 的大小,backend_ptr 的大小会增加吗?根据你的建议,我还需要这个unique_ptr 吗?

【问题讨论】:

  • 无法增加values 成员的大小。它是在编译时定义的,与values.size() 返回的值无关。同时backend_ptr的大小与Backend的大小无关,也是在编译时定义的。
  • 有点不清楚你在问什么。 sizof(Backend) 这样的表达式将是稳定的,并在编译时确定。
  • @VTT 我认为向量具有非静态内存,可以增加或缩小超时
  • 如果我超时增加其私有成员值的大小,backend_ptr 的大小会增加吗? 不,这是一个编译时间常数.
  • 我认为向量具有非静态内存,可以随时间增加或缩小向量可以分配它在堆上的数据,但是与Backendbackend_ptr 甚至values 的大小无关。

标签: c++


【解决方案1】:

对象的大小是在编译过程中确定的,与你的std::vector values动态分配的内存无关。这是因为在编译期间,您的编译器将为指向变量和对象的指针分配固定内存。因此,在您的情况下,指向您的 std::vector 的指针。

关于使用std::unique_ptr是否可行,不看整体设计很难说,但我个人的选择是避免在你的情况下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    相关资源
    最近更新 更多