Size: a a a

2021 February 14

МВ

Макс Воробьев... in dlang.ru
Тающий звук
GC-то нет, но в Ди delete - это по-идее приказ удалить объект сразу, ну я так всегда думал
да. но я в контексте того, что если на такой объект есть два указателя. через один мы вызывем destroy/delete. что будет со вторым указателем?
источник

МВ

Макс Воробьев... in dlang.ru
хотя даже без разницы, что будет. D не очень подразумевает, что в языке есть weak ptr => защищаться от того, что указатель может вдруг зануллиться, мало кто будет
источник

Т

Тающий звук... in dlang.ru
Egor Pugin
об этом и речь, что с другими объектами при этом станет?
Думаю, что все указатели должны обнулиться, т.к. объект исчез. Есть ещё конечно вариант просто обнулить удаляемый указатель, а если он один в этот момент, то удалить объект, иначе объект не удалять. Но это можно реализовать и без delete, просто присвоив null. Правда во втором случае очистка памяти вызовется не сразу, а через delete, должна сразу вызваться
источник

Т

Тающий звук... in dlang.ru
Макс Воробьев
да. но я в контексте того, что если на такой объект есть два указателя. через один мы вызывем destroy/delete. что будет со вторым указателем?
Ну если этот оператор ещё не удалили, то можно проверить
источник

МВ

Макс Воробьев... in dlang.ru
Тающий звук
Ну если этот оператор ещё не удалили, то можно проверить
не зануляется
источник

МВ

Макс Воробьев... in dlang.ru
qq
какой аналог
delete
в
D
в общем как и в ++ - не используй delete без явного повода
источник

Т

Тающий звук... in dlang.ru
Макс Воробьев
не зануляется
И ничего не происходит?
источник

МВ

Макс Воробьев... in dlang.ru
Тающий звук
И ничего не происходит?
а что должно происходить?
источник

Т

Тающий звук... in dlang.ru
Объект должен удалиться
источник

Т

Тающий звук... in dlang.ru
А если указатель не обнулился, то это ошибка получается
источник

МВ

Макс Воробьев... in dlang.ru
Тающий звук
Объект должен удалиться
объект удалился.
источник

МВ

Макс Воробьев... in dlang.ru
Тающий звук
А если указатель не обнулился, то это ошибка получается
это не ошибка
источник

МВ

Макс Воробьев... in dlang.ru
Макс Воробьев
объект удалился.
он не обязан обнуляться
источник

Т

Тающий звук... in dlang.ru
Почему не ошибка, если есть ссылка на не существующий объект? А если я им буду и дальше пользоваться?
источник

МВ

Макс Воробьев... in dlang.ru
import std.stdio;

class Test {
   void test() {}
}

int main(string[] args) {
   auto a = new Test;
   auto b = a;
   // a.destroy();
   delete a;
   writeln(a is null ? "Null": "NotNull");

   return 0;
}
источник

Т

Тающий звук... in dlang.ru
Макс Воробьев
это не ошибка
Под ошибкой я имел ввиду ссылку в чужую память, объекта-то уже нет. Значит использование указателя приведёт к ошибке
источник

МВ

Макс Воробьев... in dlang.ru
из разряда забавного: delete занулит a, destroy - нет
источник

МВ

Макс Воробьев... in dlang.ru
Тающий звук
Под ошибкой я имел ввиду ссылку в чужую память, объекта-то уже нет. Значит использование указателя приведёт к ошибке
оно условно и привело к ошибке. но если этот участок перевыделили под другой объект?
источник

МВ

Макс Воробьев... in dlang.ru
еще и другого типа/размера
источник

Т

Тающий звук... in dlang.ru
Макс Воробьев
оно условно и привело к ошибке. но если этот участок перевыделили под другой объект?
И ещё другого типа, то это ошибка будет ничем не лучше
источник