blob: 82b7554ce00228846a1bb3339c99e8f1ca0f3017 [file] [log] [blame]
#import <Foundation/Foundation.h>
namespace {
extern "C"
void objc_copyCppObjectAtomic(void *dest, const void *src, void (*copyHelper) (void *dest, const void *source)) {
copyHelper(dest, src);
}
}
static int count;
class Foo
{
static int sNextId;
int mId;
int mRefId;
public:
Foo(const Foo& rhs){
mId = sNextId++;
mRefId = rhs.mId;
printf("Foo(%d,%d)\n", mId, mRefId);
};
Foo() {
mId = sNextId++;
mRefId = mId;
printf("Foo(%d,%d)\n", mId,mRefId);
}
~Foo(){
printf("~Foo(%d, %d)\n", mId, mRefId);
};
Foo& operator=(const Foo& rhs){
mRefId = rhs.mRefId;
return *this;
};
int Data() { return fData; };
private:
int fData;
};
int Foo::sNextId = 0;
#pragma mark -
@interface TNSObject : NSObject
{
@private
Foo _cppObjectNonAtomic;
Foo _cppObjectAtomic;
Foo _cppObjectDynamic;
}
@property (assign, readwrite, nonatomic) const Foo& cppObjectNonAtomic;
@property (assign, readwrite) const Foo cppObjectAtomic;
@property (assign, readwrite, nonatomic) const Foo& cppObjectDynamic;
@end
#pragma mark -
@implementation TNSObject
@synthesize cppObjectNonAtomic = _cppObjectNonAtomic;
@synthesize cppObjectAtomic = _cppObjectAtomic;
@dynamic cppObjectDynamic;
- (id)init
{
self = [super init];
if (self) {
// Add your subclass-specific initialization here.
// If an error occurs here, send a [self release] message and return nil.
Foo cppObject;
self.cppObjectNonAtomic = cppObject;
self.cppObjectAtomic = cppObject;
self.cppObjectDynamic = cppObject;
}
return self;
}
- (const Foo&) cppObjectDynamic
{
return _cppObjectDynamic;
}
- (void) setCppObjectDynamic: (const Foo&)cppObject
{
_cppObjectDynamic = cppObject;
}
@end
#pragma mark -
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[[[TNSObject alloc] init] autorelease];
[pool drain];
return 0;
}