An easy way of reference counting using Obj-C++ is to use the boost libraries with boost::intrusive_ptr and these definitions: // file.h
namespace boost { void intrusive_ptr_add_ref( id object ); void intrusive_ptr_release( id object ); } // file.m namespace boost { void intrusive_ptr_add_ref( id object ) { [object retain]; } void intrusive_ptr_release( id object ) { [object release]; } } Then you can do things like: MyObjCObject *my_object = [[[MyObjCObject alloc] init] autorelease]; boost::intrusive_ptr< MyObjCObject> my_object_ptr = my_object; Now my_object_ptr can be safely stored in C++ classes, used in other classes such as stl::vector< boost::intrusive_ptr< MyObjCObject> > my_list; etc. Hope this helps. On Thu, Mar 20, 2008 at 9:40 AM, Jeremy <[EMAIL PROTECTED]> wrote: > Thanks for the input guys, I really appreciate the help. > > I do have a lot of C++ code that I would like to use and put behind a > Cocoa front end, so I think that using Objective C++ classes as > wrapper classes around my C++ classes is the route I would like to take. > > Anyone have an example of such a wrapper class so I can get an idea of > what is the preferred methodology? > I'm guessing that you create an Objective C++ class with a member > variable that is a C++ class and then mirror the methods from the C++ > class? > > I'm worried that I'll still end up having to import the header file > for my C++ class in my Objective C source file though, which caused a > lot of compile errors previously. > > > On Mar 20, 2008, at 12:32 PM, John Stiles wrote: > > > Without starting a religious war, I have to disagree with this. > > > > ObjC++ is probably a bad idea if you are a novice programmer in > > general, but I think it also has some really good things going for > > it, and having written huge amounts of ObjC++ code, I think it's > > perfectly straightforward to use. It is by far your best bet for > > writing cross-platform code that uses a native Cocoa front end. > > > > > > Rob Napier wrote: > >> > >> On Wed, Mar 19, 2008 at 4:12 PM, Jeremy <[EMAIL PROTECTED]> wrote: > >> > >>> Hi. > >>> > >>> I am just starting to learn Cocoa and would like to use standard C > >>> ++ > >>> classes from my Objective C/C++ classes. > >>> > >> You really don't. You think you do (probably because you know C++), > >> but then you enter the crazy messed up world of Objective-C++ and > >> discover that you really wish you hadn't. A bit of an overstatement, > >> yes, but really I'd recommend against using ObjC++ unless you have > >> existing C++ code that you have to bridge to, and then it's best used > >> just to wrap the C++ classes so that ObjC can deal with them. Learn > >> Cocoa in pure ObjC. > >> > >> ObjC and C++ have very different models for managing memory, types, > >> pointers and well, just about everything. Memory management in > >> particular is a real hassle. ObjC++ strips away the safety nets from > >> both ObjC and C++ because now you have to track two very different > >> ways of managing memory (retain counting versus ref variables for > >> instance). > >> > >> > >>> Is there any known documentation on how to do this, or does anyone > >>> have any pointers? > >>> > >>> I tried creating a new object of my C++ class and calling a > >>> method on > >>> it in a .m file and received a bunch of errors (including new not > >>> being found). > >>> > >>> I then changed my .m file to a .mm file and all of the errors went > >>> away except for one: > >>> "cannot find interface declaration for 'MyClass'" > >>> > >> This probably means that ObjC expects there to be an ObjC class > >> called > >> MyClass (rather than a C++ class called MyClass; they're completely > >> unrelated class structures). I suspect that you accidentally put > >> "@class MyClass" somewhere rather than "class MyClass", or possibly > >> wrote "@interface MyClass" somewhere. Alternately, you failed to put > >> "class MyClass" above the declaration of m_pMemberVariable and so the > >> compiler assumed MyClass was an ObjC class (this is less likely since > >> you should have gotten a compiler error elsewhere for that error). > >> > >> I strongly recommend naming your ObjC and ObjC++ classes differently. > >> I typically name the ObjC++ classes ending in "Wrapper" but that's > >> because I only ever use these classes to wrap existing C++ classes > >> defined in separate C++-only projects. > >> > >> Also, make sure that you're working in the right namespace. You may > >> need to say "new myNamespace::MyClass" here. > >> > >> ObjC++ is deep magic. It is not a good place to learn Cocoa. It is a > >> useful tool once you know Cocoa and need to integrate it at key > >> points > >> with C++. > >> > >> -Rob > >> > > _______________________________________________ > > Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) > > Please do not post admin requests or moderator comments to the list. > Contact the moderators at cocoa-dev-admins(at)lists.apple.com > > Help/Unsubscribe/Update your Subscription: > > http://lists.apple.com/mailman/options/cocoa-dev/cmeyer1969%2Bapple%40gmail.com > > This email sent to [EMAIL PROTECTED] > _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to [EMAIL PROTECTED]