为构造函数中的结构数组分配存储C++
Allocate storage for array of structs in C++ constructor
我正在尝试在构造函数中为结构数组动态分配存储。 我是C++新手,并且尝试了各种语法变体,但现在我想知道是否可以做到这一点。
struct Trade
{
int index;
}
define MAX_TRADES 5000
struct foo
{
Trade *trade [MAX_TRADES];
int cumeTradeCount;
foo() :
cumeTradeCount(0),
{
// here is where I want to allocate storage for cumeTradeCount Trade structures
....
memset(trade, 0, cumeTradeCount * sizeof(Trade*));
}
}
具体来说,我试图弄清楚的是如何在构造函数中为"cumeTradeCount"结构分配存储。如果我在 C 中执行此操作,我会执行以下操作:
for (int i = 0; i < cumeTradeCount; ++i)
trade[i] = calloc(1, sizeof(Trade *));
你需要读一本好C++书。您的代码在堆栈上分配 5000 个指针。
要在堆栈上分配 5000 个Trade
对象,只需使用 Trade trade[MAX_TRADES]
...例:
struct Trade
{
int index;
};
#define MAX_TRADES 5000
struct foo
{
Trade trade[MAX_TRADES];
int cumeTradeCount;
foo() :
cumeTradeCount(0)
{
// allocate storage for cumeTradeCount Trade structures
//memset(trade, 0, cumeTradeCount * sizeof(Trade*));
// You don't need it
}
};
至于堆,您可以使用运算符new
在堆上进行分配。
更改此项:Trade *trade [MAX_TRADES];
Trade *trade = new Trade[MAX_TRADES];
由于它是类成员,下面是它是如何完成的。但是不要忘记在你的析构函数中delete
它......下面是一个完整的示例...
struct Trade
{
int index;
};
#define MAX_TRADES 5000
struct foo
{
Trade *trade;
int cumeTradeCount;
foo() : trade(new Trade[MAX_TRADES]),
cumeTradeCount(0)
{
// allocate storage for cumeTradeCount Trade structures
//memset(trade, 0, cumeTradeCount * sizeof(Trade*));
// You don't need it
}
~foo() { delete[] trade; }
};
.我强烈建议您使用std::array
或std::vector
而不是原始数组。再一次,在C++中,我们更喜欢使用const
和constexpr
来#defines
->仍然,你需要读一本好C++书。
下面,将为您省去许多不可预见的头痛。
#include <vector>
struct Trade
{
int index;
};
#define MAX_TRADES 5000
struct foo
{
std::vector<Trade> trade;
int cumeTradeCount;
foo() : trade(MAX_TRADES),
cumeTradeCount(0)
{ }
};
Trade* trade [MAX_TRADES];
不是动态分配。它是一个固定大小的数组,包含 5000 个指向Trade
的指针。
如果这是您想要的,您可以将它们全部设置为 NULL
或更好的nullptr
然后像这样填充您需要的:
trade[i] = new Trade();
不要忘记在析构函数中使用delete
并实现适当的赋值、复制构造函数和复制赋值。
如果你想要一个动态数组,请使用这样的东西:
Trade* trade[];
//in constructor
trade = new Trade*[sizeOfArray]; //remember those pointers are still uninitialized
或者,如果您不需要指针:
Trade trade[];
//in constructor
trade = new Trade[sizeOfArray];
既然你问的是C++,那就更容易用
了-
std::array<Trade*,NUM_TRADES>
(对于固定数量的指针), -
std::array<Trade,NUM_TRADES>
(固定的Trade
秒数), -
std::vector<Trade*>
(对于可变数量的指针), -
std::vector<Trade>
(对于可变的Trade
秒数),
相关文章:
- 存储在堆分配向量中的指针的免费存储
- 如何为静态常量模板化专用整数值分配存储
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- C++ 将抽象类型的动态分配对象传递给函数并存储在向量中
- 具有对齐存储的动态内存分配
- shared_ptr的删除程序是否存储在自定义分配器分配的内存中?
- C++标准对局部变量的存储和分配有什么保证?
- 将 C 样式字符串复制到免费存储上分配的内存中
- 未存储分配的数据
- 存储数据列表并自动分配给结构的最佳方法是什么
- 在未分配某些元素的数组中存储了什么值
- 在类存储结构中使用动态分配的数组
- 动态分配存储数据在堆中的随机位置中
- 当分配动态内存以存储字符串副本时,程序会中断
- 我可以在不手动将它们分配在堆上的情况下存储iostreams集合
- 为什么使用预留分配存储后不能迭代和打印矢量的内容?
- 在调用解构之后,存储在内存中的动态分配值会发生什么变化
- C++为对象分配存储而不对其进行初始化
- 使用指针为文件C++中的数字动态分配存储
- 为构造函数中的结构数组分配存储C++