2015-04-22 163 views
3

如何在目标c类的接口部分中定义std :: unique_ptr的@property?std :: unique_ptr作为@property在目标c中

@property std::unique_ptr<MyClass> ptr; 

但我可以定义一个共享指针!

如果我定义唯一指针,然后我得到了错误:

不能因为它的拷贝赋值运算符的分配是 隐含删除

+0

通过这个[链接](http://stackoverflow.com/a/8696263/3733561) – Saif

+0

谢谢..我这样做。我可以使用智能指针一般只是当我使用作为一个属性在接口部分唯一我得到了这个错误..即使我用它作为一个变量,它工作正常.. –

回答

1

物业合成是罪魁祸首这里。当您声明@property unique_ptr<MyClass>时,编译器会隐式创建setter和getter函数以及一个支持变量。

设定功能可能看起来是这样的:

-(void) setPtr:(std::unique_ptr<MyClass>)ptr { 
    _ptr = ptr; 
} 

在组功能行调用的std ::其中的unique_ptr有意删除,因为的std ::的unique_ptr使用移动语义的拷贝赋值运算符。请记住,您无法复制unique_ptr,您只能将所有权从一个实例转移到另一个实例。

要解决此问题,您需要定义自己的集合并获取尊重移动语义的函数,或者您需要直接使用伊娃。

下面是一个可以正常工作的示例集函数。

-(void) setPtr:(std::unique_ptr<MyClass>)ptr { 
    _ptr = std::move(ptr); 
}