ورود

View Full Version : کار نکردن allocator



Sepidar
جمعه 09 شهریور 1386, 10:02 صبح
سلام
در کد زیر یک کلاس allocator جدید تعریف شده و از stl خواسته شده از اون کلاس برای یه container خاص استفاده کنه.
اما لااقل در این حد که بنده مطالعه کردم باید هنگام از بین رفتن container یا آزاد شدن حافظه مربوط به اعضای آن، لااقل یکی از متدهای deallocate یا destroy فراخوانی بشه. اما خروجی کد زیر (فقط عدد ۱) خلاف این مساله رو نشون میده.

#include <iostream>
#include <vector>
#include <memory>

using std::cout;
using std::endl;

class MyAllocator:public std::allocator<int>
{
public:
MyAllocator()
{
cout<<"1"<<endl;
}
void destroy(pointer p)
{
cout<<"2"<<endl;
//whatever
//std::allocator<int>::destroy(p);
}
void deallocate(pointer p, size_type n)
{
cout<<"3"<<endl;
//whatever
//std::allocator<int>::deallocate(p,n);
}

};

typedef std::vector<int,MyAllocator> MyVector;

int main()
{
MyVector* vec=new MyVector();

vec->push_back(0);

vec->pop_back(); //free memory and print someting on screen
vec->clear(); //please do it! :((
delete vec; //why so lazy?

return 0;
}کامپایلر:
gcc 4.1.2

VouDou_ir
جمعه 09 شهریور 1386, 10:52 صبح
به جای destroy از MyAllocator~ استفاده کنید.

Sepidar
جمعه 09 شهریور 1386, 11:24 صبح
به جای destroy از MyAllocator~ استفاده کنید.
مطلقا ربطی نداره. اون destry کاری به کلاس خود allocator نداره. بلکه وظیفش چیز دیگست.
اینجا رو ببین:
http://www.tantalon.com/pete/customallocators.ppt