$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Ilya Sokolov (fal_delivery_at_[hidden])
Date: 2006-11-30 12:16:00
Sohail Somani wrote:
>>-----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");
> }
sorry for such late response, i think you should also consider
Andrei and Petru's ScopeGuard from http://www.ddj.com/dept/cpp/184403758