The*_* do 4 c++ pointers memory-management
这里是deallocate mem的声明.分配器类.我的问题是这个宣言中的第二个论点是什么?如果这个函数调用operator delete(_Ptr),那么这个参数是不被使用的,那么它的用途是什么?
谢谢.
摘自MSDN:
从指定位置开始的存储中释放指定数量的对象.
void deallocate(
pointer _Ptr,
size_type _Count
);
Run Code Online (Sandbox Code Playgroud)
参数
_Ptr指向要从存储中释放的第一个对象的指针.
_Count要从存储中取消分配的对象数.
当您调用时deallocate,必须为它指定一个先前从调用中获取的指针allocate以及allocate最初分配内存时传递给的大小.
例如,
#include <memory>
std::allocator<int> a;
int* p = a.allocate(42);
a.deallocate(p, 42); // the size must match the size passed to allocate
Run Code Online (Sandbox Code Playgroud)
这对许多不同类型的分配器很有用.例如,您可能有一个分配器,它为不同大小的块使用不同的池; 这样的分配器需要知道被解除分配的块的大小是什么,以便它知道返回内存需要哪个池.
它没有被闲置.
来自MSDN:
从指定位置开始的存储中释放指定数量的对象(在本例中为_Ptr).
参数
_Ptr 指向要从存储中释放的第一个对象的指针.(开始位置)
_Count 要从存储中取消分配的对象数.
示例代码:
// allocator_allocate.cpp
// compile with: /EHsc
#include <memory>
#include <iostream>
#include <vector>
using namespace std;
int main( )
{
allocator<int> v1Alloc;
allocator<int>::pointer v1aPtr;
v1aPtr = v1Alloc.allocate ( 10 );
int i;
for ( i = 0 ; i < 10 ; i++ )
{
v1aPtr[ i ] = i;
}
for ( i = 0 ; i < 10 ; i++ )
{
cout << v1aPtr[ i ] << " ";
}
cout << endl;
v1Alloc.deallocate( v1aPtr, 10 );
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
724 次 |
| 最近记录: |