我在可可库中有这段代码:
-(NSPointerArray *) GetRequestsFromCalendar:(int) calid
{
NSPointerArray * reqs=[[NSPointerArray alloc] initWithOptions:NSPointerFunctionsOpaqueMemory];
for(int i=0;i<5; ++i){
Request * newreq=new Request();
[reqs addPointer:newreq];
}
for (NSUInteger i=0;i<5;++i) {
void * ptr=[reqs pointerAtIndex:i];
std::cout<<*((Request *) ptr)<<std::endl;
}
在这里,我的预期值打印了“Request1”“Request1”“Request1”“Request1”“Request1”
return reqs;
}
当我从其他可可库调用此函数并访问 NSPointerArray 时,
NSPointerArray * array=[obj GetRequestsFromCalendar:1]
for (NSUInteger i=0; i<[array count]; ++i) {
void * ptr=[array pointerAtIndex:i];
std::cout<<*((Request *) ptr)<<std::endl;
}
打印不是预期值,例如 ??????aod?)@"?? ....
Request 是一个 C++ 类,重载了 std::ostream & operator << 和私有成员 std::string 名称,初始化为“Request1”
两个库都使用自动引用计数
调用函数后指针似乎是免费的,但我不确定。有人可以帮忙吗?