首页 > 解决方案 > c++中类成员的内存分配

问题描述

我在这里有一个简单的问题,

template <class T, MAX_ITEMS>
Class A{
public:
  T buf[MAX_ITEMS];
}

A<class_name, 1000> obj_A;

当我使用最后一行声明 obj_A 时,它是否保留了空间?对于 sizeof(class_name)*1000 或仅当我使用 new 关键字声明 obj_A 时才会保留?

标签: c++

解决方案


它保留空间吗?对于 sizeof(class_name)*1000 或仅当我使用 new 关键字声明 obj_A 时才会保留?

是的,它将为 1000 个该类型的元素静态分配足够的内存。如果您的对象具有静态/线程存储持续时间,那么它可能会起作用。如果您的对象具有自动存储持续时间,根据类型和堆栈大小,可能会导致堆栈溢出。

或者仅当我使用 new 关键字声明 obj_A 时它才会保留?

如果使用new关键字,它将动态分配内存(动态存储持续时间)。通常,您如何创建对象并不重要。如果你成功地创建了一个A<class_name, 1000>类型的对象,它肯定有空间容纳 1000 个类型class_name的对象。

在此处了解有关存储期限的更多信息。


推荐阅读