powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / const + умные указатели
12 сообщений из 12, страница 1 из 1
const + умные указатели
    #39641941
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я хочу сделать константным объект, указатель на который будет храниться в умном указателе. Но возникает вопрос о том как сделать объект константным:
Код: plaintext
1.
2.
3.
const shared_ptr<VariativeData> Settings = std::make_shared<VariativeData>();
...
Settings->Add("gfdgfd", 1135); //НЕТ ОШИБКИ!!! 



Как запретить редактировать объект, находящийся под shared_ptr?
...
Рейтинг: 0 / 0
const + умные указатели
    #39641951
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, кажись разобрался. Надо в типе шаблона указывать спецификатор const:
Код: plaintext
1.
shared_ptr<const VariativeData> Settings;



А const перед самим умным указателем не позволяет его перенаправить на другой объект.
...
Рейтинг: 0 / 0
const + умные указатели
    #39641952
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLА const перед самим умным указателем не позволяет его перенаправить на другой объект.
Позволяет
...
Рейтинг: 0 / 0
const + умные указатели
    #39641953
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyAlekseySQLА const перед самим умным указателем не позволяет его перенаправить на другой объект.
Позволяет
А, если имелось в виду что нельзя менять сам указатель - то да.
...
Рейтинг: 0 / 0
const + умные указатели
    #39641958
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyAnatoly Moskovskyпропущено...

Позволяет
А, если имелось в виду что нельзя менять сам указатель - то да.

Написал такой чудо- код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
using sptr_VariativeData = std::shared_ptr<const VariativeData>;

void SetGlobalVariable(sptr_VariativeData CurrentSettings) noexcept;

void Create()
{
    const sptr_VariativeData Settings = CreateSettings();

    SetGlobalVariable(Settings);
}



Отлично собирается! Почему, ведь моя переменная объявлена как const, а принимающая функция не гарантирует const ???
...
Рейтинг: 0 / 0
const + умные указатели
    #39641960
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, ну я и лох!
Я же передал по значению :)
Прошу не кидать в меня ссаными тряпками, я подсознательно думал, что это указатель...
...
Рейтинг: 0 / 0
const + умные указатели
    #39642010
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLAnatoly Moskovskyпропущено...

А, если имелось в виду что нельзя менять сам указатель - то да.

Написал такой чудо- код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
using sptr_VariativeData = std::shared_ptr<const VariativeData>;

void SetGlobalVariable(sptr_VariativeData CurrentSettings) noexcept;

void Create()
{
    const sptr_VariativeData Settings = CreateSettings();

    SetGlobalVariable(Settings);
}



Отлично собирается! Почему, ведь моя переменная объявлена как const, а принимающая функция не гарантирует const ???


Код: plaintext
1.
 std::shared_ptr<const VariativeData>;



имеет мало смысла. Ты удалить это не сможешь...
...
Рейтинг: 0 / 0
const + умные указатели
    #39642011
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLБлин, ну я и лох!
Я же передал по значению :)
Прошу не кидать в меня ссаными тряпками, я подсознательно думал, что это указатель...

Это указатель, но передал ты его по значению ..
:)
...
Рейтинг: 0 / 0
const + умные указатели
    #39642012
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLЯ хочу сделать константным объект, указатель на который будет храниться в умном указателе. Но возникает вопрос о том как сделать объект константным:
Код: plaintext
1.
2.
3.
const shared_ptr<VariativeData> Settings = std::make_shared<VariativeData>();
...
Settings->Add("gfdgfd", 1135); //НЕТ ОШИБКИ!!! 



Как запретить редактировать объект, находящийся под shared_ptr?

Это имеет мало смысла, ты не сможешь удалить такой объект.
А суть умного указателя как раз в том, чтобы объект удалить, когда будет не нужно уже.
...
Рейтинг: 0 / 0
const + умные указатели
    #39642021
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivты не сможешь удалить такой объект.

Какой? Можно по-подробнее?
...
Рейтинг: 0 / 0
const + умные указатели
    #39642276
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
Код: plaintext
1.
 std::shared_ptr<const VariativeData>;



имеет мало смысла. Ты удалить это не сможешь...

Неужели если я делаю объект, находящийся под shared_ptr, константным, то потом при отсутствии ссылок на shared_ptr он не удалится??? Тогда как запретить менять объекты под shared_ptr?
...
Рейтинг: 0 / 0
const + умные указатели
    #39642312
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLMasterZiv
Код: plaintext
1.
 std::shared_ptr<const VariativeData>;




имеет мало смысла. Ты удалить это не сможешь...

Неужели если я делаю объект, находящийся под shared_ptr, константным, то потом при отсутствии ссылок на shared_ptr он не удалится??? Тогда как запретить менять объекты под shared_ptr?
Да все удалится, просто MasterZiv не выспался ))
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / const + умные указатели
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]