У меня есть функция, которая эффективно это делает
void foo(Class** c)
{
// memory checks and stuff
(*c) = new Class();
// more stuff
}
Я не могу изменить эту функцию. Чтобы вызвать эту функцию, мне нужно сделать что-то вроде этого.
Class* c = nullptr;
foo(&c);
if (c)
{
// stuff
}
delete c;
Я бы предпочел использовать std::unique_ptr
, а не необработанный указатель. Однако я не знаю, как получить адрес внутреннего указателя. Приведенный ниже листинг, очевидно, не компилируется, потому что я пытаюсь взять адрес rvalue.
std::unique_ptr<Class> c = nullptr;
foo(&(c.get()));
if (c)
{
// stuff
}
Я понимаю, что могу создать необработанный указатель, а также уникальный указатель, вызвать функцию, затем укажите необработанный указатель на уникальный указатель, но я бы предпочел этого не делать. Есть ли способ делать то, что я хочу?