Непонятно, чем не устраивает первый способ хранения:
typedef std::set <Texture *> TextureSet;
Многим, напр нельзя так
C++ (Qt)
// проверяем такая текстура уже есть в глобальном set
static bool LookupTexture( const Texture * iTexture )
{
return theTextures.find(iTexture) != theTextures.end();
}
Если здесь убрать const - это потянет за собой др. методы.
Какие операции предполагается выполнять с объектами Texture? Вызывать его константные методы? Так способ храния здесь непричем. Если методы константные, то они не должены менять состояние объета, в противном случае: убираем "const" или ищем ошибку в проектировании класса.
При втором способе хранение весь объект константный. Нельзя менять его состояние, даже если он не содержит константных методов.
По книжке - да, а по жизни как?
Вот пример
C++ (Qt)
if (!LookupTexture(iTexture)) { // текстура готова?
theTextures.insert(iTexture); // нет, регистрируем ее
iTexture->CreateDataOpenGL(); // это не константный метод
|
можно сделать это поле mutable, тогда его можно будет менять из const методов
Полей тех много и они в очень многих др. классах