所以我试图了解C ++中的std::allocator<>
,并且在参考网站上对一些事情感到困惑。特别是因为我读过构造和解构器的分配器方法在C ++ 17中被弃用
这是我作为示例编写的以下代码
// Example with pointers and allocators
#include <iostream>
#include <memory>
int main()
{
std::allocator<int> nums;
int * first = nums.allocate(1); //is this on the heap, like with calling new int(4)?
int * second = nums.allocate(2);
*first = 7;
second[0] = 2;
second[1] = 4;
std::cout << *first << std::endl;
std::cout << second[1] << std::endl;
nums.deallocate(first, 1); //is the int safely deleted from memory?
nums.deallocate(second, 2);
}
当一个人调用allocate方法时,返回的指针指向堆上的动态内存块还是分配了内存堆栈?
此外,当一个人调用deallocate方法时,被解除分配的指针是否还要从内存中删除它?解除分配等同于delete
?
答案 0 :(得分:1)
当一个人调用allocate方法时,返回的指针是否指向堆上的动态内存
C ++标准没有使用 heap 这个词,但是std::allocator
从免费商店分配,这通常称为堆,因为这是通常用于实现它的数据结构。
当一个人调用deallocate方法时,被解除分配的指针是否还要从内存中删除它?解除分配等同于
delete
?
delete
做了两件事:它调用对象的析构函数并释放内存。 std::allocator::deallocate
执行后一部分而后者执行。 std::allocator::destroy
执行前者。请注意,在内存被释放时,未指定,只有它是。