2014-10-13 2 views
-1

У меня есть базовый класс C++ с частной std :: map, query_map, который заполнен новыми указателями на конструкцию. В деструкторе я просматриваю и удаляю все указатели, чтобы избежать утечек памяти. Производные классы будут реализовывать чистую виртуальную функцию из базового класса, и я хочу, чтобы реализации этой функции имели доступ для чтения к query_map, но не имели доступа на запись (так как это приведет к тому, что деструктор будет seg-fault). Естественно, я думал о создании чистой виртуальной функции const, но это блокирует все переменные-члены, а также не-константные функции-члены, когда я действительно хочу сделать только query_map const. Я не могу использовать C++ 11 или выше из-за нашей целевой платформы и кросс-компилятора.CPP Класс Write-Protect Member

Выполняет полную функцию const действительно мой единственный вариант?

+0

Что вы пытаетесь сказать? Было бы лучше вставить код! – CinCout

+0

Вы даже прочитали его? Это не проблема с моим кодом, это проблема с выбором правильных абстракций и защит для моего кода ... – RPGillespie

+0

Имя переменной ('query_map') звучит как имя метода! Я был смущен! – CinCout

ответ

3

Сделать query_map частное поле, и обеспечить защищенный аксессор функцию, которая возвращает константную ссылку на него:

private: 
    std::map<...> query_map; 

protected: 
    std::map<...> const & get_query_map() const { return query_map; } 
2

обеспечивает доступ к query_map через константную функцию геттера.

Смежные вопросы