在c++对象中使用ARC和Objective C对象会发生什么?

What happens with ARC and an Objective C object inside a C++ object?

本文关键字:对象 什么 Objective c++ ARC      更新时间:2023-10-16

我很惊讶这个编译没有错误。当ARC刚出现的时候,我不认为它曾经是。

class SessionWriter
{
    NSString *sessionDir;
    ...
};

看起来NSString是由ARC在析构函数中释放的。这些记录在哪里?

一般来说,objective - c++的文档记录相当少。除了苹果的高级教程和低级API列表之外,Objective-C 2.0语言本身缺乏正式的规范,objective - c++的规范更少。从广义上讲,你似乎应该相信事情"行得通"。从逻辑上讲,C和c++之间的过渡作为基本语言。

Clang ARC文档确实触及了这一点,尽管他们实际上描述了Objective-C和objective - c++结构体(而不是c++类)在行为上的区别。不过,它很清楚地表明,ARC确实适用于objective - c++聚合。

非平凡的所有权限定类型被认为是非pod:在c++ 11术语中,它们不是平凡的默认可构造、复制可构造、移动可构造、复制可赋值、移动可赋值或可析构。在ARC之外使用一个类,而在ARC下,该类将具有非平凡的所有权限定成员,这违反了c++的"单一定义规则"。

的基本原理

与C语言不同,我们可以将所有必要的ARC语义表示为类的(默认)特殊成员函数的子操作。这些函数就变得不平凡了。这有一个不明显的结果,即类将有一个非平凡的复制构造函数和非平凡的析构函数;如果在ARC之外通常不成立,则该类型的对象将以与abi不兼容的方式传递和返回。

相关文章: