Moh*_*eia 5 objective-c shared-ptr unique-ptr ios
如何在 Objective C 类的接口部分定义 std::unique_ptr 的 @property ?
@property std::unique_ptr<MyClass> ptr;
Run Code Online (Sandbox Code Playgroud)
但我可以定义一个共享指针!
如果我定义唯一指针,则会出现以下错误:
无法赋值,因为其复制赋值运算符被隐式删除
属性综合是这里的罪魁祸首。当您声明 时@property unique_ptr<MyClass>
,编译器会隐式创建 setter 和 getter 函数以及支持变量。
set 函数可能看起来像这样:
-(void) setPtr:(std::unique_ptr<MyClass>)ptr {
_ptr = ptr;
}
Run Code Online (Sandbox Code Playgroud)
set 函数中的该行调用 std::unique_ptr 的复制赋值运算符,该运算符被有意删除,因为 std::unique_ptr 使用移动语义。请记住,您无法复制 unique_ptr,只能将所有权从一个实例转移到另一个实例。
为了解决这个问题,您要么需要定义自己的 set 并获取尊重移动语义的函数,要么需要直接使用 ivar。
这是一个可以正常工作的示例集函数。
-(void) setPtr:(std::unique_ptr<MyClass>)ptr {
_ptr = std::move(ptr);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2404 次 |
最近记录: |