- Почему возникает ошибка при использовании make_unique() ?
- make_unique не компилируется для создания одноэлементного экземпляра
- 2 ответа
- Есть ли способ разрешить make_unique передавать аргументы конструктору T?
- 2 ответа
- Почему не работает make unique
- Почему не работает make unique
- [20.1] Make Unique As Sample not working
Почему возникает ошибка при использовании make_unique() ?
Пишу следующий код:
В то же время, код с созданием умного указателя и последующей его передачи не вызывает ошибки:
Не могу понять, почему для make_unique() отсутсвует определение. Как сделать так, чтобы заполнение умного указателя делалось через make_unique()?
Ахтыж, я то думал что в C++11 make_unique уже было завезено.
алгоритм такой: вводишь в гугл интересующую плюсовую штуковину (c++ std::make unique), открываешь в результатах cppreference.com (обычно первый в списке) и вверху справа видишь https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique зелёным написано «since c++14)
там же выше видишь, в каком заголовночном файле определена сия сущность
очень удобно, если `man make_unique` недостаточно понятен
Забей, он необучаем.
Операционная система: CentOS 7.
Поставил пакет c С++ документацией:
На зато есть `man std::unique_ptr`.
алгоритм такой: вводишь в гугл интересующую плюсовую штуковину (c++ std::make unique), открываешь в результатах cppreference.com (обычно первый в списке) и вверху справа видишь https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique зелёным написано «since c++14)
Я туда всегда в первую очередь лезу. Просто когда устаешь и начинаешь тупить, не замечаешь очевидного.
Потому что std::make_unique ожидает либо отсутствие аргумента, либо значение unsigned char. Что возвращает SOIL_load_image?
Упс, да. Только с четырнадцатого стандарта оно доступна.
Но это не отменяет того, что тут явная дурь написана:
Источник
make_unique не компилируется для создания одноэлементного экземпляра
Я использую C ++ 14 и делаю более или менее стандартный синглтон. Я использую последнюю версию Visual Studio 2017. Этот код работает:
Однако, когда я меняю создание экземпляра синглтона на это:
Я получаю сообщение об ошибке компиляции, что пытаюсь получить доступ к закрытому члену:
Мне это кажется ошибкой, поскольку две формы должны быть идентичны по функциям? Мысли?
2 ответа
Цель std::unique_ptr<> — управлять временем жизни указанного объекта. Вы можете передать std::unique_ptr<> , но это также передаст право собственности на указанный объект. Эта концепция не очень хорошо сочетается с концепцией синглтона. Есть только одно место, где когда-либо разрешено создавать (или удалять) синглтон. Для этого вам действительно не нужен std::unique_ptr<> . Как уже было сказано в комментариях, для этого есть более простые способы. Я бы предпочел предложение @ Praetorian:
Причина, по которой вы не можете использовать std::make_unique<>() для создания экземпляра вашего класса, заключается в том, что конструктор является частным. Чтобы получить к нему доступ, вам необходимо, чтобы функция доступа была friend . Взгляните на Как сделать std :: make_unique другом моего класса для этого. Другое решение — предоставить общедоступный конструктор, требующий в качестве аргумента частный тип, как описано в этом решении.
Это создает A внутри функции make_unique . Но оператор, которому вы хотите позвонить, является частным.
ctor_permission_t действует как жетон, дающий его владельцу право построить A . Мы передаем это в make_unique .
Параметр explicit int в ctor_permission_t делает невозможным его создание без имени типа, и только в экземплярах и друзьях A его можно назвать, потому что он является частным. Это затрудняет обход этого токена разрешения.
Источник
Есть ли способ разрешить make_unique передавать аргументы конструктору T?
У меня есть несколько объектов того же класса в массиве, на который указывает unique_ptr, и каждый объект может быть создан только с помощью явного конструктора, так как некоторые аргументы должны быть переданы конструктору.
При инициализации я собираюсь создать такой unique_ptr, как показано ниже:
Но похоже, что ни одна из версий make_unique не может делать это, как указано выше. Согласно документации: если make_unique создает массив, он принимает только один аргумент, который является размером массива.
Я не могу использовать вектор в этих сценах, поскольку ClassA — это очередь сообщений, которая используется несколькими потоками (производителями / участниками), а вектор перемещает элементы в новое место, если места недостаточно.
Есть ли другой способ, в котором я могу сделать массив класса, который имеет только явный конструктор? В то же время я все еще хочу использовать unique_ptr для управления ими.
2 ответа
Думаю, идея, предложенная @AchimGuetlein, лучше.
Хотя элементы вектора можно перемещать, в моих очередях не происходит перемещения. Перемещенные объекты — это unique_ptr self, но адреса очередей никогда не будут изменены.
Приносим извинения за фиксацию в качестве ответа, так как образец кода нельзя изящно показать как кодлет в комментарии.
Вам не обязательно использовать make_unique , вы можете создать указатель и передать некоторую вручную выделенную память.
Источник
Почему не работает make unique
Forum rules
WE NEED DETAILS!
We appreciate it’s frustrating when things don’t work. However, please help us to help you by following these suggestions:
- Update — Before trying anything else. Download and install the latest version of FL Studio from here. Your bug may be fixed already!
- Update plugins — If you are using 3rd party plugins. Look at crash logs for their names. Install the latest version for any you spot. See also Plugins Behaving Badly
- Simple clear explanation — Explain what you are doing, or trying to do, and exactly what is happening.
- Specific information — a) FL Studio version & build number, b) what you are doing and what happens exactly, c) step-by-step instructions how reproduce the problem.
- Screenshots — Another great way to demonstrate issues. Get a free screenshot app here. Include images using the ‘Attachments’ tab, at the bottom of the post edit window.
- A video — The best way of demonstrating many issues. Windows 10 includes an integrated screen recorder, see here OR get a free free recorder here. Include mp4 videos to your post from the ‘Attachments’ tab, at the bottom of the post edit window.
- Use English — Google Translate your post. Short simple sentences in your original language translate best. We are happy to work this way, no need to worry.
NOTE: Technical Support is ONLY available Monday — Friday (9 am to 5 pm Central European Time), thank you.
ALL posts made in this forum are ‘ Private‘ so that only you and staff can see them. This allows sharing of personal data, projects and other information. Posts are generally made public after they are marked ‘Solved’ AND there was no personal data contained in them.
Источник
Почему не работает make unique
Forum rules
WE NEED DETAILS!
We appreciate it’s frustrating when things don’t work. However, please help us to help you by following these suggestions:
- Update — Before trying anything else. Download and install the latest version of FL Studio from here. Your bug may be fixed already!
- Update plugins — If you are using 3rd party plugins. Look at crash logs for their names. Install the latest version for any you spot. See also Plugins Behaving Badly
- Simple clear explanation — Explain what you are doing, or trying to do, and exactly what is happening.
- Specific information — a) FL Studio version & build number, b) what you are doing and what happens exactly, c) step-by-step instructions how reproduce the problem.
- Screenshots — Another great way to demonstrate issues. Get a free screenshot app here. Include images using the ‘Attachments’ tab, at the bottom of the post edit window.
- A video — The best way of demonstrating many issues. Windows 10 includes an integrated screen recorder, see here OR get a free free recorder here. Include mp4 videos to your post from the ‘Attachments’ tab, at the bottom of the post edit window.
- Use English — Google Translate your post. Short simple sentences in your original language translate best. We are happy to work this way, no need to worry.
NOTE: Technical Support is ONLY available Monday — Friday (9 am to 5 pm Central European Time), thank you.
ALL posts made in this forum are ‘ Private‘ so that only you and staff can see them. This allows sharing of personal data, projects and other information. Posts are generally made public after they are marked ‘Solved’ AND there was no personal data contained in them.
[20.1] Make Unique As Sample not working
Hey guys, love the new update — great new features.
A bug that is happening for me is that every time I cut part of an audio clip, and then proceed to ‘Make Unique As Sample’, the clip disappears.
Here’s a series of images (OBS is not working):
An example audio clip
Any fixes for this?
FL Studio 20.1 [build 785]
Also on a side note, loop recording no longer automatically mutes the recorded clips. Was this an intentional alteration?
Источник