>> Ну, и? Перегружать operator=? Как из оператора = вызвать деструктор для self^W
>> this?
> Именно - перегружать operator= . Можно сделать какой-нибудь защищенный (protected) метод
> Finalize, где будут аккуратно чиститься все те поля класса, которые требуют
> ручной очистки, и дергать его и в перегруженном operator=, и в
> деструкторе.Угу. Понял.
> Все те комментарии, что тебе написали тут - они не столько со
> зла, сколько реакция на недоумение прибывшего в монастырь гостя его
> уставом. Не всякий корректно ответит на такое. Представь себе, что ты
> приходишь к жабистам и говоришь: "Посаны, у чего это у вас
> тут деструкторов нет? А чего finalize перегруженный ни разу не вызвался?
> Нет, вы ответьте, вы ответьте, как мне добиться того, чтобы finalize
> дернулся при выходе из области видимости?!"
Мне это непонятно. Что-то бумкнуло и C++ фаны рванулись обсуждать личности, будто они по жизни не программисты, а психологи.
В Jave, насколько я её помню, есть простой ответ на поставленный вопрос:
finalize вызовется тогда, когда сборщик мусора будет подбирать память за объектом -- это может произойти через секунду, или через двое суток, зависит от разных факторов, на которые не следует полагаться. Сделать так, чтобы он вызвался при выходе из области видимости объекта невозможно. Если очень надо, вызывай finalize вручную там, где надо.
Ну, то есть, может я не правильно помню жабу, лет двадцать в неё не заглядывал, но это _три_ предложения ответа. На мой вопрос, по-хорошему, примерно столько же. Надо одно предложение на упоминание copy_elision, на случай, если я не понимаю что происходит в моём примере. Одно предложение на то, как надо заходить к решению -- перегружать =. То есть даже в два можно уложиться.
ps. А на форумах C++ сплошные тролли небось? Если на простые вопросы такая реакция, там небось кормиться можно так, что потом не встать будет.