c++ - 空 vector 占用的空间是否与指向当前设置为 nullptr 的类型的指针一样多?

标签 c++ c++11

我有一个类:

class Foo{

std::vector<Sprite*> vec;
Sprite* bar = nullptr;

}

然后我做:

Foo zoom;

在程序执行的这个点上,哪个占用的空间更大? vec 还是 bar ?

编辑:

在下面的情况下,如果我这样做:Foo zoom; 会占用更少的空间:

class Foo{
Sprite* bar1 = nullptr;
Sprite* bar2 = nullptr;
Sprite* bar3 = nullptr;
}

class Foo{
    std::vector<Sprite*> vec;
}

最佳答案

在这段代码中:

class Foo{

    std::vector<Sprite*> vec;
    Sprite* bar = nullptr;

};

bar 将是指针的大小,这取决于平台。通常,它将是 32 位(4 字节)或 64 位(8 字节)。

vec 将是 std::vector 对象的大小,这取决于您的标准库是如何实现的。

所以我们不能绝对肯定地说,但是我们可以根据标准要求std::vector 做什么来做出很好的猜测该类型的对象将大于单个指针。

大了多少?很难说。重要吗?没有。

通过声明指针数组* 来抵制尝试构建您自己的std::vector 的冲动。你不会比编译器更聪明。与使用标准库的类相比,您最终得到的代码既大又慢。这就是他们在那里的目的。

__
* 除非你的内存分析器实际上告诉你这里有问题。

关于c++ - 空 vector 占用的空间是否与指向当前设置为 nullptr 的类型的指针一样多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44542267/

相关文章:

c++ - 如何将对象转换为int?

c++ - 模板参数类型取决于函数参数的模板函数

c++ - 创建指向函数的指针 vector

c++ - 使用 MinGW/Cygwin 的 NetBeans IDE 8 中的 C++ 自动完成不正确

c++ - 效率与内存权衡

c++ - 使一维指针数组指向二维 vector 中的对象

c++ - 在 Boost 库 asio 示例中,处理程序分配之前的 [this, self] 是什么意思?

c++ - 更改结构元素的常量

c++ - 解决 VC++12 中的模板特化错误?

c++ - 当存在其他构造函数时,如何强制创建默认序列构造函数?