做这样的事情是否使用动态内存分配?
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/