我很惊讶这编译没有错误。当ARC第一次出现时,我认为不习惯。
class SessionWriter
{
NSString *sessionDir;
...
};
看起来ARC在析构函数中释放NSString
。这记录在哪里?
答案 0 :(得分:2)
Objective-C ++一般来说文档很少。除了Apple的高级教程和低级API列表之外,Objective-C 2.0语言本身缺乏正式的规范,而Objective-C ++则更少。从广义上讲,似乎你应该相信,在C和C ++作为基本语言的过渡中,事物在逻辑上“起作用”。
Clang ARC文档做touch on this a bit,尽管它们实际上描述了Objective-C和Objective-C ++结构之间的行为差异而不是C ++类。但是,很明显,ARC确实可以用于Objective-C ++聚合。
非重要的所有权限定类型被认为是非POD:在C ++ 11术语中,它们不是简单的默认可构造,可复制构造,移动可构造,可复制可分配,可移动可分配或可破坏。使用ARC之外的类是违反C ++的一个定义规则的,在ARC下,它将拥有一个非常重要的所有权限成员。
原理
与C不同,我们可以将所有权限的子对象的所有必要ARC语义表示为类的(默认)特殊成员函数的子操作。这些功能变得非常重要。这具有非显而易见的结果,该类将具有非平凡的复制构造函数和非平凡的析构函数;如果在ARC之外通常不会出现这种情况,那么该类型的对象将以ABI不兼容的方式传递和返回。