【发布时间】:2016-02-17 07:02:41
【问题描述】:
我正在尝试实现一个可以动态调整大小的数组类,它会在不初始化值的情况下分配内存。我的问题与我以后如何释放内存有关:
我可以这样实现我的代码吗?:
template<typename Type>
class Array {
Type *values;
Array(int size) : values(new (size * sizeof(Type)) char()) {}
~Array() {
delete[] values;
}
}
或者我需要这样的东西吗?:
template<typename Type>
class Array {
Type *values;
void *memory;
Array(int size) : memory(new (size * sizeof(Type)) char()), values(memory), size(size) {}
~Array() {
delete[] memory;
}
}
注意!!!!我知道这将在不初始化任何 Type 对象的情况下分配内存。这是我的代码的预期行为。此外,上面的代码不是我的完整实现,它只是分配和释放内存的代码,因为这是我对这个问题感兴趣的内容。
经过进一步研究,我发现我应该使用malloc() 和free() 来做我想做的事情。感谢所有的回答和评论。
【问题讨论】:
-
为什么不
memory(new Type[size])? -
FWIW,为什么不
vector<Type>或者至少研究一下它的工作原理和作用!在第二个示例中,您从不构造任何Type顺便说一句,但您破坏了其中的size,这肯定是错误的。另外,你的分配语法看起来很奇怪,我本来希望new char[some size here]。 -
我不使用内存(new Type[size])或vector
的原因是因为两个实例都会分配内存,然后为每个位置构造一个实例。我在我的问题中指定我不想创建任何类型的实例,只为它分配内存。 -
@Dynisious 我建议你研究一下
new char[42]和new char[42]()之间的区别。
标签: c++ memory-management placement-new