$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: David Klein (dave_chp_at_[hidden])
Date: 2006-11-28 19:31:52
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");
> }
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://listarchives.boost.org/mailman/listinfo.cgi/boost-users
>
>   
+1 vote for this idea :)
i actually kind of did this for my current project,
because i needed a custom deleter for scoped_ptr,
when shared_ptr was to much overhead...
-- regards dave