views:

142

answers:

4

I want to start using smart pointers in my code but I don't really want to use Boost because it's so huge.

Can anyone recommend a simple, one-file smart pointer implementation?

Thanks, Boda Cydo.

+4  A: 

Unfortunately, smart pointers are not all that simple, so the implementation may be quite complicated. Having said that, if you are using g++ you get things like shared_ptr without having to use Boost:

#include <memory>
using namespace std;

int main() {
    shared_ptr <int> p( new int );
}

but you will have to compile with the -std=c++0x flag.

anon
Thanks. Can you please tell me where shared_ptr is located?
bodacydo
@bodacydo It's in `<memory>` - see the code I posted.
anon
Thank you. Gonna try it out.
bodacydo
Perhaps it's worth pointing out to bodacydo that the c++0x flag turns on experimental support for an uncertified new C++ standard and is probably not a good idea for production code. boost is not really a hugeness issue. Just check it into your repository and use the bits of it you need. Most of it is header file only so you only compile what you need. I was initially nervous of boost till a colleague came over one day and looked at my code and informed me that half my half arsed utility code was already in boost and more reliable.
bradgonesurfing
@brad shared_ptr doesn't use any new C++0x features - but I agree that the flag turns on other things you might not want (or there again, you might).
anon
+3  A: 

You could upgrade to a recent-enough compiler and use what TR1 gives you. The compiler I use has included TR1 pre-releases for many years.

Dirk Eddelbuettel
+1  A: 

The thing is boost is just a set of header files (the majority).

So when you use things like smart pointers all you get are the smart pointers.
There is no extra cost for the things you are not using.

Martin York
A: 

Probably this may help you: http://www.parashift.com/c++-faq-lite/freestore-mgmt.html#faq-16.22. It's a short example for implementing reference counting. In case you're implementing "shared_ptr" by yourself, cases of simple pointer and array should be distinguished, like in boost.

Ilia Barahovski