如何在 Objective C 类的接口部分定义 std::unique_ptr 的 @property ?
@property std::unique_ptr<MyClass> ptr;
但我可以定义一个共享指针!
如果我定义唯一指针,则会出现以下错误:
无法赋值,因为它的复制赋值运算符是
隐式删除
属性综合是这里的罪魁祸首。当你声明@property unique_ptr<MyClass>
,编译器隐式创建 setter 和 getter 函数以及支持变量。
set 函数可能看起来像这样:
-(void) setPtr:(std::unique_ptr<MyClass>)ptr {
_ptr = ptr;
}
set 函数中的该行调用 std::unique_ptr 的复制赋值运算符,该运算符被有意删除,因为 std::unique_ptr 使用移动语义。请记住,您无法复制 unique_ptr,只能将所有权从一个实例转移到另一个实例。
为了解决这个问题,您要么需要定义自己的 set 并获取尊重移动语义的函数,要么需要直接使用 ivar。
这是一个可以正常工作的示例集函数。
-(void) setPtr:(std::unique_ptr<MyClass>)ptr {
_ptr = std::move(ptr);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)