LINUX.ORG.RU

История изменений

Исправление eao197, (текущая версия) :

Нет разницы между «компилятор вызывает функции инкремента/декремента» и «компилятор вызывает конструкторы, деструкторы и операторы копирования-перемещения, которые выполняют инкремент/декремент».

Есть. Пусть вызывается деструктор вида:

my_smart_pointer::my_smart_pointer() {
  if(data_) {
    if(0 == dec_ref_count(data_->ref_count_)) {
      delete data_->obj_;
      delete data_;
    }
  }
}
Если я допущу ошибку и забуду декрементировать счетчик, никакого GC у меня не будет. При этом вызовы деструкторов для экземпляров my_smart_pointer компилятор будет вставлять.

Это одно и то же - ручное указание, где использовать 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 у меня не будет. При этом вызовы деструкторов для экземпляров my_smart_pointer компилятор будет вставлять.

Это одно и то же - ручное указание, где использовать GC, а где нет.

Это для языка с GC так можно говорить: здесь GC, здесь не GC.

В случае с C++ (в котором GC нет), этого недостаточно.

Я и не собирался это доказывать - только объяснить.

Ты не объяснил, каким образом shared_ptr относится с GC (пусть даже и на основе подсчета ссылок). То, что shared_ptr использует внутри себя подсчет ссылок еще не переводит его в категорию GC.