17 / 17 / 2
Регистрация: 29.10.2013
Сообщений: 269
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Передача unique_ptr в конструктор другого класса12.10.2018, 11:34. Показов 4907. Ответов 7
Метки unique_ptr (Все метки)
Как нужно передать unique_ptr в конструктор др. класса?
есть такой код: .h файл:
Ошибка C2664 "Camera::Camera(const Camera &)": невозможно преобразовать аргумент 1 из "std::unique_ptr<Camera,std::default_delete<_Ty>>" в "const Camera &" Ошибка C2664 "MasterRender::MasterRender(const MasterRender &)": невозможно преобразовать аргумент 1 из "Camera *" в "std::unique_ptr<Camera,std::default_delete<_Ty>> &" В классе Camera никаких умных указателей нет. Ошибки находит в файле memory, в 1630 строку
0
|
12.10.2018, 11:34 | |
Ответы с готовыми решениями:
7
Конструктор класса не видит конструктор по умолчанию другого класса Конструктор внутри класса, поля которого являются членами другого класса Конструктор класса с инициализацией другого класса Передача объектов другого класса в конструктор через params |
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
12.10.2018, 11:54 | 2 |
вы - моральный человек?
с логикой дружите? как вы вообще себе представляете присвоение смарта с уникальным владельцем смарту, который шарит ресурсы? я уникальный указатель! у меня может быть только один хозяин. я это гарантирую. а я - шаристый указатель. у меня может быть множество хозяев. ээээээ????????????? WHAT THE FUNK??????
0
|
17 / 17 / 2
Регистрация: 29.10.2013
Сообщений: 269
|
|
12.10.2018, 12:15 [ТС] | 3 |
замена на unique_ptr ничего не даёт.
И как тогда правильно всё таки передать unique_ptr? Дайте хотя бы ссылку как их использовать,. И что тут? распишите.
0
|
177 / 15 / 11
Регистрация: 05.12.2017
Сообщений: 131
|
|
12.10.2018, 12:15 | 4 |
nublin1, Думаю, вам стоит почитать про std::move(...), а после этого советую почитать, что такое move - конструктор.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
12.10.2018, 12:20 | 5 |
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|
12.10.2018, 12:22 | 6 |
1
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||||||||||||||||||
12.10.2018, 12:37 | 7 | |||||||||||||||||||||||||
Сообщение было отмечено nublin1 как решение
Решениеесть ресурс. Камера. шаристый смарт ( shared_ptr<Camera> ) реализует стратегию:"один ресурс, множество потребителей" он позволяет расшаривать ресурс между множеством владельцев:
юник ( unique_ptr<Camera> ) реализует стратегию:"один хозяин для одного ресурса" он гарантирует, что у ресурса может быть только 1 хозяин.
для юников допустима передача права владения:
так же, для юников допустимо клонирование (глубокое копирование ресурса)
возвращаясь к нашим баранам:
что в принципе запрещено: он не должен копироваться, потому что наличие копии сделает его не уникальным, что противоречит идее его существования. а во-вторых, вы пытались присвоить шаристому указателю уник. это как это по вашему получается? уникальный указатель раздать куче различных потребителей? налетай, подешевело? разбирай кто хочет?
1
|
17 / 17 / 2
Регистрация: 29.10.2013
Сообщений: 269
|
|
12.10.2018, 13:03 [ТС] | 8 |
Отлично! Вот сейчас я всё понял. Кроме 1-го:
У меня есть объект camera, который я хочу исп. в множестве мест. Для этого я делаю его shared_ptr и отправляю, но в принимающих классах ему уже не надо быть доступным для всех. При этом его нельзя сделать unique . Или не беспокоится о этом?
0
|
12.10.2018, 13:03 | |
12.10.2018, 13:03 | |
Помогаю со студенческими работами здесь
8
Передача управления из конструктора класса-родителя в конструктор класса-потомка Передача названия класса в метод другого класса в качестве входных данных Передача значения переменной из метода одного класса в метод другого класса Передача конструктору одного класса объект другого класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |