2015-04-22 158 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); 
}