История изменений
Исправление eao197, (текущая версия) :
Нет разницы между «компилятор вызывает функции инкремента/декремента» и «компилятор вызывает конструкторы, деструкторы и операторы копирования-перемещения, которые выполняют инкремент/декремент».
Есть. Пусть вызывается деструктор вида:
my_smart_pointer::my_smart_pointer() {
if(data_) {
if(0 == dec_ref_count(data_->ref_count_)) {
delete data_->obj_;
delete data_;
}
}
}
Это одно и то же - ручное указание, где использовать GC, а где нет.
Это для языка с GC так можно говорить: здесь GC, здесь не GC.
В случае с C++ (в котором GC нет), этого недостаточно.
Я и не собирался это доказывать - только объяснить.
Ты не объяснил, каким образом shared_ptr относится к GC (пусть даже и на основе подсчета ссылок). То, что shared_ptr использует внутри себя подсчет ссылок еще не переводит его в категорию GC.
Исходная версия eao197, :
Нет разницы между «компилятор вызывает функции инкремента/декремента» и «компилятор вызывает конструкторы, деструкторы и операторы копирования-перемещения, которые выполняют инкремент/декремент».
Есть. Пусть вызывается деструктор вида:
my_smart_pointer::my_smart_pointer() {
if(data_) {
if(0 == dec_ref_count(data_->ref_count_)) {
delete data_->obj_;
delete data_;
}
}
}
Это одно и то же - ручное указание, где использовать GC, а где нет.
Это для языка с GC так можно говорить: здесь GC, здесь не GC.
В случае с C++ (в котором GC нет), этого недостаточно.
Я и не собирался это доказывать - только объяснить.
Ты не объяснил, каким образом shared_ptr относится с GC (пусть даже и на основе подсчета ссылок). То, что shared_ptr использует внутри себя подсчет ссылок еще не переводит его в категорию GC.