|
Boost Users : |
From: Sohail Somani (s.somani_at_[hidden])
Date: 2006-11-28 19:09:18
> -----Original Message-----
> From: boost-users-bounces_at_[hidden]
> [mailto:boost-users-bounces_at_[hidden]] On Behalf Of mark cox
> Sent: Tuesday, November 28, 2006 2:37 PM
> To: boost-users_at_[hidden]
> Subject: Re: [Boost-users] Suggestion for boost`s smart pointers
>
> wow, this seems like a great idea, a scoped_ptr with deleter
> would be v.useful.
> mark
I've been thinking something like (just something I hacked together just
now). Not sure if there is a nicer way.
#include <string>
#include <cstdio>
#include <iostream>
template<typename T>
struct DeletingDeleter
{
DeletingDeleter(T * p)
{
delete p;
std::cout << "DeletingDeleter" << std::endl;
}
};
struct FileCloser
{
FileCloser(FILE * f)
{
std::cout << "Closing file" << std::endl;
fclose(f);
}
};
template<typename T, typename Deleter=DeletingDeleter<T> >
struct scoped_ptr
{
scoped_ptr():p_(0){}
scoped_ptr(T * p):p_(p){}
~scoped_ptr()
{
Deleter d(p_);
}
T * get() {return p_;}
// regular stuff
private:
T * p_;
};
typedef scoped_ptr<FILE,FileCloser> file_ptr;
int main()
{
scoped_ptr<int> a; // maintain old interface
scoped_ptr<int> b(new int(5));
file_ptr p(fopen("myfile.txt","w"));
fprintf(p.get(),"Hello world!\n");
}
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net