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
در کد زیر یک کلاس 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