Разница в функциональности между ARC и RAII

Я пытаюсь понять разницу между 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 идиома)?

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector