std::array
将其对象存储在堆栈中。下面的代码是我尝试推送std::array
,特别是(这是重要的)...将std::array
管理的项目推送到堆中。
class X{
private:
array<Y,10> data;
}
auto upA = make_unique<X>();
我的示例中的std::array
的数组元素是否在堆上?是否有更优雅的方式将std::array
推送到堆?
答案 0 :(得分:3)
严格地说,std :: array不会将其对象存储在堆栈中,而是将它们存储在std :: array本身存储的任何位置。换句话说:如果你有一个std :: array作为成员的对象,那么这个std :: array将被存储在存储对象本身的任何地方。因此,如果仅使用operator new在堆上分配类X的对象,则此对象中的数组也将与对象一起位于堆上。
另一方面,你真的不需要为此创建一个类和一个对象,你可以这样做:
auto a = new std::array<Y, 10>;