c++ - 在堆栈和堆上创建对象数组

标签 c++ arrays object heap-memory stack-memory

考虑以下代码:

class myarray
{
    int i;

    public:
            myarray(int a) : i(a){ }

}

如何在栈上创建myarray的对象数组,如何在堆上创建对象数组?

最佳答案

您可以通过以下方式在堆栈上创建对象数组:

myarray stackArray[100]; // 100 objects

在堆上(或“freestore”):

myarray* heapArray = new myarray[100];
delete [] heapArray; // when you're done

但最好不要自己管理内存。相反,请使用 std::vector :

#include <vector>
std::vector<myarray> bestArray(100);

vector 是一个动态数组,它(默认情况下)从堆中分配元素。††


因为你的类没有默认构造函数,要在堆栈上创建它,你需要让编译器知道将什么传递给构造函数:

myarray stackArray[3] = { 1, 2, 3 };

或者用一个 vector :

// C++11:
std::vector<myarray> bestArray{ 1, 2, 3 };

// C++03:
std::vector<myarray> bestArray;
bestArray.push_back(myarray(1));
bestArray.push_back(myarray(2));
bestArray.push_back(myarray(3));

当然,你总是可以给它一个默认的构造函数:

class myarray
{
    int i;    
public:
    myarray(int a = 0) :
    i(a)
    {}
};

† 对于学究:C++ 并没有真正的“堆栈”或“堆”/“freestore”。我们拥有的是“自动存储”和“动态存储”持续时间。实际上,这与堆栈分配和堆分配保持一致。

††如果你想从堆栈中“动态”分配,你需要定义一个最大大小(堆栈存储提前知道),然后给 vector 一个新的分配器,以便它使用堆栈。

关于c++ - 在堆栈和堆上创建对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1598397/

相关文章:

c++ - 重载 == 运算符导致丢弃限定符错误

c++ - 我可以使用 `operator delete[]` 进行单个元素数组分配吗?

javascript - 为什么 PHP json_encode 会展平数组?

java - 我真的很难弄清楚如何让我的 GUI 窗口显示数组中的值

c# - 显示不同对象的数组c#(类继承)

c++ - 是否存在某些情况下 boost::function 无法被 std::function 替换的情况?

c++ - 如何使用 Unicode 中的 CFile::Read() 从文件中获取 CString 对象?

c++ - 从 VB6 调用的 C++ DLL 函数中的输出数组参数

javascript - 如何获取 JavaScript 对象的大小?

javascript - 合并来自链式 axios 请求的两个数组