Size: a a a

2021 July 01

AB

Aleksei Budyakov in supapro.cxx
А как там это реализовано ?
источник

GF

Georgy Firsov in supapro.cxx
Ну если кратко, то там указатель на данные и лежит
А всякие data() сделаны так:
const T* data() const;
T* data();
источник

AS

Anton Semenov in supapro.cxx
ну, по сути, две версии методов, возвращающие константные и и неконстантные ссылки в зависимости от константности объекта
источник

AB

Aleksei Budyakov in supapro.cxx
Т е если объект константный то возвращается в соответствующем методе указатель на константные данные
источник

AS

Anton Semenov in supapro.cxx
то есть, продолжая нашу аналогию -
class Foo {
 Boo* ownedData;
public:
 const Boo& getData() const { return *ownedData; }
 Boo& getData() { return *ownedData;  }
};
источник

AB

Aleksei Budyakov in supapro.cxx
Понятно. Спасибо
источник

AS

Anton Semenov in supapro.cxx
а вообще, конечно, лучше вообще ручным управлением памяти не заниматься, как выше советовали
источник

AS

Anton Semenov in supapro.cxx
то есть хранить свою ownedData внутри стандартного контейнера, или использовать std::unique_ptr или std::shared_ptr
источник

AS

Anton Semenov in supapro.cxx
тогда не придётся вообще заморачиваться с "менеджментом объектов", писать методы из "правила 5", а в случае контейнеров и с константностью уже определенные гарантии даются
источник

AB

Aleksei Budyakov in supapro.cxx
А умные указатели значит не дадут менять данные в случае константного объекта имеющего поля - умные указатели  ?
источник

AB

Aleksei Budyakov in supapro.cxx
Ещё один вопрос - завезли ли шаблонные виртуальные функции ?
источник

AS

Anton Semenov in supapro.cxx
не, не дадут. Только позволят не беспокоиться об управлении памятью. Константность умных указателей - про состояние самого пойнтера - так, const unique_ptr<T> означает запрет перемещения или ресета для unique_ptr'а а, а не защиту его данных. Но зато unique_ptr<T> можно спокойно неявно кастовать к unique_ptr<const T>

Зато контейнеры следят за логической константностью своего содержимого.
источник

AS

Anton Semenov in supapro.cxx
Нет, виртуальных шаблонных функций как не было, так и нет. И это довольно логично всё-таки. Ведь шаблоны инстанциируются на месте, компилятор просто технически не может внести в таблицу виртуальных функций каждый инстанс. А даже если бы и мог - какой в этом практический смысл?
источник

AB

Aleksei Budyakov in supapro.cxx
То есть с шаблонами лучше статический полиморфизм и всякие crtp дружить ?
источник

АК

Александр Караев... in supapro.cxx
На всякий случай уточню, что у шаблона класса могут быть виртуальные функции
источник

AS

Anton Semenov in supapro.cxx
конечно!
Впрочем, разумеется, иногда статический и динамический полиморфизм могут "сливаться в экстазе" :)
Пример - type-erasure классы std::any, std::function, со статическим полиморфизмом снаружи и динамическим внутри. Ну и, конечно, шаблонные классы с виртуальными функциями, как говорит @smertig
источник

SA

Sergey Anisimov in supapro.cxx
А вот есть такой, внезапно. В очередной раз, тов. @smertig/@anatolijs: может все-таки имеет смысл в описания подконтрольных каналов засунуть это (может быть даже капсом)?
источник

D

Dmitriy in supapro.cxx
К сожалению, найти в этом списке что-то по слову "лицензия" не удастся
источник

SA

Sergey Anisimov in supapro.cxx
Я полез в "разное" и увидел там слово "legal". Ну а дальше Вы видите)
источник

D

Dmitriy in supapro.cxx
Находится он в категории "разное" и обладает отнюдь не очевидным названием. Да, я недосмотрел. Но от этого его не становится легче найти
источник