Есть класс, указатель на объект которого возвращает некоторая функция.
Нужно обеспечить удаление этого объекта после того как он станет не нужен.
Когда он станет не нужен - знает только программист, вызвавший функцию, но он может забыть удалить его.
Решением было бы - передавать указатель на этот объект некоему подобию smart-pointer'а, который разрушаясь удалял бы объект.
Псевдокод:
Код: Выделить всё
...
{
Obj* obj=repository.getObject("objectName");
Obj_var ov (obj)
ov->getName(); // Получить имя объекта
ov->setAttr("time", 10l); // Установить значение аттрибута
...
//.. тут что-то ещё делается
...
// и вот тут, объект ov разрушается и удаляет объект obj
}Но вообще-то вся функциональность содержится в объекте obj и программист может вызывать те же методы и у него.
А как можно вынудить программиста работать только через вспомогательный объект Obj_var?
Единственное что приходит в голову: закрыть все методы у Obj а Obj_var объявить friend'ом.
Но как-то... не нравятся мне все эти friend'ы - я это ключевое слово никогда раньше даже и не использовал.
Есть какие-нибудь ещё варианты?