Я пытаюсь понять разницу между C ++ как RAII и Obj-C или Swift как ARC.
Допустим, у меня есть эта функция:
foo() {
bar = new obj();
} // lifetime of bar object ends
Если obj был объектом на языке RAII, bar
Деструктор будет вызван.
Если obj был объектом на языке ARC, bar
Количество удерживаемых элементов будет уменьшено на единицу, вероятно, его освободят.
Таким образом, на данный момент оба подхода имеют некоторые функциональные возможности, которых нет у другого:
АРК знает, bar
указано в какой-то другой части программы (что в принципе невозможно в моем примере, но потерпите меня) и может использовать эту информацию в своих интересах.
RAII может сделать больше, чем просто освободить объект, так как вы можете определить функцию деструктора так, как вы хотите.
тем не мение, C ++ также имеет умные указатели, а Swift и Obj-C имеют функции освобождения. Поэтому разве эти языки не имеют одинаковую функциональность, и Swift можно назвать языком RAII, а C ++ — языком ARC (или, скажем, можно использовать можно использовать с ARC идиома)?
Задача ещё не решена.
Других решений пока нет …