是否使用动态内存分配

是否使用动态内存分配

做这样的事情是否使用动态内存分配?

template <class T, int _size>
class CArray
{
public:
    ...
private:
    T m_data[_size];
};

有人可以向我解释创建对象时幕后发生的事情吗?
CArray<SomeObject, 32> myStupidArray;

最佳答案

正如其他答案中提到的,模板是在编译时评估的。如果您有兴趣,您可以让 g++ 吐出类层次结构,您可以在其中验证其大小:

template <class T, int _size>
class CArray
{
public:
private:
  T m_data[_size];
};

int main(int argc, char **argv) {
  CArray<int, 32> myStupidArray1;
  CArray<int, 8> myStupidArray2;
  CArray<int, 64> myStupidArray3;
  CArray<int, 1000> myStupidArray4;
}

-fdump-class-hierarchy 编译:
g++ -fdump-class-hierarchy blah.cc

当前目录下应该有一个名为blah.cc.t01.class的文件:
Class CArray<int, 32>
   size=128 align=4
   base size=128 base align=4
CArray<int, 32> (0x40be0d80) 0

Class CArray<int, 8>
   size=32 align=4
   base size=32 base align=4
CArray<int, 8> (0x40be0e80) 0

Class CArray<int, 64>
   size=256 align=4
   base size=256 base align=4
CArray<int, 64> (0x40be0f80) 0

Class CArray<int, 1000>
   size=4000 align=4
   base size=4000 base align=4
CArray<int, 1000> (0x40be6000) 0

关于c++ - 这个包含可变大小数组的 C++ 类是否使用动态内存分配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/554476/

10-09 13:49