Я делаю класс, который делится данными между несколькими объектами с использованием динамической памяти. Соответствующие части класса показаны ниже.Сделать shared_ptr в классе неспособным изменить объект, на который указывает объект объекта const
class StrBlob
{
public:
StrBlob::StrBlob(std::initializer_list<std::string> il) :
data(std::make_shared<std::vector<std::string>>(il)) {}
void push_back(const std::string &t) const { data->push_back(t); }
private:
std::shared_ptr<std::vector<std::string>> dataPtr;
};
Я понимаю, что делает push_back константную функцию-член, я говорю, что эта функция не изменит DataPtr элемент. Однако базовый вектор, который указывает dataPtr, не является константой, как показано в приведенном ниже коде.
//The result is foo = {"bar", "foobar"}
const StrBlob foo = {"bar"};
foo.push_back("foobar");
Возможно ли или даже желательно сделать базовый вектор const, сделав объект StrBlob const? Должно быть что-то вроде make dataPtr указатель на const, когда объект const, но я не уверен, как этого добиться.
Вам нужно что-то вроде ['propagate_const'] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4372.html). К сожалению, это только предложение прямо сейчас. –