小编Chr*_*888的帖子

未使用的成员变量会占用内存吗?

初始化成员变量而不引用或使用它会在运行时进一步占用RAM,还是编译器只是忽略该变量?

struct Foo {
    int var1;
    int var2;

    Foo() { var1 = 5; std::cout << var1; }
};
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,成员'var1'得到一个值,该值然后显示在控制台中。但是,根本不使用“ Var2”。因此,在运行时将其写入内存将浪费资源。编译器会考虑这种情况,而只是忽略未使用的变量,还是Foo对象总是相同大小,而不管是否使用其成员?

c++ memory struct

88
推荐指数
5
解决办法
6891
查看次数

向量 push_back 调用对象析构函数

类似的问题在这里被问过很多次,但按照答案并没有解决我的问题。

假设我有:

1)两个类(ACLass 和 BClass)

2)AClass有一个构造函数和一个析构函数

3)BClass 有一个 std::vector 成员存储 AClass 的对象

4)该向量中的元素数量事先未知

5) 每当调用 BClass 方法 generateObject() 时,向量都会随着新的 AClass 对象的创建而扩展。这是通过调用 std::vector.push_back() 来完成的。

class AClass {
    AClass()  { //Constructor }
    ~AClass() { //Destructor }
};

Class BClass {
    std::vector<AClass> object;

    void generateObject() {
        object.push_back(AClass());
    }
};
Run Code Online (Sandbox Code Playgroud)

现在,在上面的例子中, generateObject() 只会工作几次。一旦向量变得太小而无法容纳所有对象,它就会执行各种内部操作以保留更多内存以进行扩展。问题是在此过程中调用了一些(如果不是全部)AClass 析构函数。

由于元素数量未知,因此不能选择使用 Reserve() 为向量保留更多空间。使用 emplace_back() 也没有解决我的问题。

那么我该怎么做呢?有没有办法防止调用析构函数?在这种情况下使用 std::vector 是个好主意吗?

c++ destructor vector

1
推荐指数
1
解决办法
319
查看次数

标签 统计

c++ ×2

destructor ×1

memory ×1

struct ×1

vector ×1