如果我在一个类中有一个静态属性并且创建该类的许多新实例

时间:2014-01-05 22:41:15

标签: c++ memory static

如果我在一个类中有一个静态属性并且创建了该类的许多新实例...静态属性是否只占用1个内存,而所有其他公共成员都占用了他们需要的内容。

问题:

class Raindrop
{
public:
    Raindrop( ComPtr<ID3D11Device1> d3dDevice );
    ~Raindrop( );

    void Initialize( );
    void Update( );
    void RandomiseXPos();

    float x;
    float y;
    float z;
    float velocity;

    static const unsigned short indices[ 6 ];
    static const VERTEX vertices[ 4 ];

    const ComPtr<ID3D11Device1> d3dDevice;
    ComPtr<ID3D11Buffer> vertexbuffer;
};

我想让许多Raindrops拥有自己的x,y,z,velocity和initialise / update / randomiseXPos函数......但是这个雨滴的实际顶点和索引......对于每个雨滴来说都是一样的

通过将这些属性声明为静态...我实际上是否会阻止每个雨滴创建和使用x次?

1 个答案:

答案 0 :(得分:2)

  

通过将这些属性声明为静态...我实际上是否会阻止每个雨滴创建和使用x次?

绝对 - 这就是static的含义。当您需要在类的所有实例(例如indicesvertices数组)之间共享对象的实例时,通常会创建共享实例const(正如您所做的那样) )以避免意外修改。

注意:在C ++中,除了声明之外,还需要定义静态成员。因此,两个包含相同类的副本的单独编译的动态库有可能最终会包含两个包含静态对象的独立内存。这样的情况在实践中很少发生,所以你应该没事。