gpt4 book ai didi

c++ - 分配和释放内存 C++

转载 作者:行者123 更新时间:2023-11-30 02:33:27 25 4
gpt4 key购买 nike

我正在尝试实现一个可以动态调整大小的数组类,它将在不初始化值的情况下分配内存。我的问题与我稍后如何释放内存有关:

我可以用这种方式实现我的代码吗?:

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() 来完成我想做的事情。感谢所有的回答和评论者。

最佳答案

您可以使用 Type* 使生活更轻松,并使用 operator new 无需构造对象即可获取内存。

Type* values; //No aliasing/casting issues
Array(int size) : values((Type*)::operator new(sizeof(Type) * size)) //...
~Array() { /*clean up extant objects*/ ::operator delete(values); }

然后您可以使用 placement new 和显式析构函数调用来管理元素。此外,placement new 不分配内存。它在指定地址构造一个对象。

关于c++ - 分配和释放内存 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35449989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com