Boost logo

Boost Users :

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://lists.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

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