Можно ли сделать доступным только для чтения копируемый (по ссылке) shared_ptr? - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь создать файл shared_ptr только для чтения, который используется несколькими экземплярами. Ни один из экземпляров не должен иметь возможности изменять содержимое объекта указателя. Но экземпляры должны иметь возможность скопировать его в течение неизвестного периода.

a const std::shared_ptr<T> не может быть легко сохранено в ссылке на атрибут, так как это должно быть определено конструктором. (и константная ссылка, по определению, постоянная)

Я сделал класс обертки

template<class T>
class const_shared_ptr
{
    public:

    const_shared_ptr(std::shared_ptr<T> ptr) 
    {
      m_ptr = ptr;
    }



    const T* get() const
    {
        return m_ptr.get();
    }

    private:

    std::shared_ptr<T> m_ptr;


}

этот код чистый? или есть более простой способ сделать? это выглядит довольно простой проблемой, но я не могу придумать никакого решения.

1 Ответ

0 голосов
/ 17 января 2019

Вы можете инициализировать общий указатель на const-объект из общего указателя на неконстантный объект.

#include <memory>


void foo ()
{
    auto v = std::make_shared <int> (10);

    std::shared_ptr <int const> x = v;

    // *x = 10; ERROR
}
...