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



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



А const перед самим умным указателем не позволяет его перенаправить на другой объект.
...
Рейтинг: 0 / 0
08.05.2018, 12:32
    #39641952
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
const + умные указатели
AlekseySQLА const перед самим умным указателем не позволяет его перенаправить на другой объект.
Позволяет
...
Рейтинг: 0 / 0
08.05.2018, 12:34
    #39641953
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
const + умные указатели
Anatoly MoskovskyAlekseySQLА const перед самим умным указателем не позволяет его перенаправить на другой объект.
Позволяет
А, если имелось в виду что нельзя менять сам указатель - то да.
...
Рейтинг: 0 / 0
08.05.2018, 12:42
    #39641958
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
const + умные указатели
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
08.05.2018, 12:46
    #39641960
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
const + умные указатели
Блин, ну я и лох!
Я же передал по значению :)
Прошу не кидать в меня ссаными тряпками, я подсознательно думал, что это указатель...
...
Рейтинг: 0 / 0
08.05.2018, 14:00
    #39642010
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
const + умные указатели
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
08.05.2018, 14:02
    #39642011
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
const + умные указатели
AlekseySQLБлин, ну я и лох!
Я же передал по значению :)
Прошу не кидать в меня ссаными тряпками, я подсознательно думал, что это указатель...

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



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

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

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



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

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




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

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


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