0

我在可可库中有这段代码:

-(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”

两个库都使用自动引用计数

调用函数后指针似乎是免费的,但我不确定。有人可以帮忙吗?

4

0 回答 0