在c++对象中使用ARC和Objective C对象会发生什么?
What happens with ARC and an Objective C object inside a C++ object?
我很惊讶这个编译没有错误。当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不兼容的方式传递和返回。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 是什么让放置新调用对象的构造函数?
- 当 std::move 与 C 样式数组或不移动对象时会发生什么
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 在什么条件下使用 std::memcpy 在对象之间复制是安全的?
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 为对象分配整数.输出将是什么?
- 当使用对象名称后带有 [] 的类对象时,您究竟会传入什么.C++
- 什么是"undetectable means",它们如何更改 C/C++ 程序的对象?
- 在C++中,创建'n'数量的对象的推荐方法是什么,其中n是用户定义的。我该怎么做?
- 使用 gtest 框架在单元测试代码中检查目标对象的私有变量的最佳实践是什么?
- 删除对象(具有不同类型)的引用时会发生什么情况?
- 一个对象什么时候可以有非零大小的一个,但不能同时具有一个或多个字节的存储
- 在C++中,对象什么时候真正被销毁?delete(ptr)做什么
- C++在文件中保存类对象和从文件中读取类对象.什么是最好的选择