Я читаю «Эффективный C++» Скотта Майерса, и теперь я нахожусь в пункте 15, предоставляя доступ к необработанному ресурсу в классах управления ресурсами. Вот пример:Утечка ресурса из объекта RAII
class Font { // RAII class
public:
explicit Font(FontHandle fh) // acquire resource;
: f(fh) // use pass-by-value, because the
{} // C API does
~Font() { releaseFont(f); } // release resource
... // handle copying (see Item14)
private:
FontHandle f; // the raw font resource
};
Он предложил ввести явную функцию члена преобразования для получения доступа к необработанным ресурса:
class Font {
public:
...
FontHandle get() const { return f; } // explicit conversion function
...
};
Вот что он сказал:
Некоторые программисты может потребовать явного запроса на удаление таких конверсий, чтобы избежать использования класса. То, что в turn, увеличит шансы утечки шрифтов, самое то, что Класс шрифта предназначен для предотвращения.
Я не понял, как предоставление доступа к сырьевому ресурсу увеличивает шансы утечки шрифтов? Мы просто вернули копию исходного указателя на объект ресурса. И мы не должны беспокоиться о доступе к указателю на болтовню, полученному с помощью функции-члена get
, потому что оператор delete будет вызываться только в том случае, если мы выйдем из области видимости.
Что я пропустил?
Он говорит, что ** не используя класс ** увеличит вероятность утечки шрифтов. –
«Некоторые программисты могут ... избегать использования класса. Это, в свою очередь, увеличит шансы утечки» –
Я голосую, чтобы закрыть этот вопрос как не относящийся к теме, потому что OP неправильно прочитал текст проблемы –