Что такое объем уникального_PTR, возвращаемой из функции?

StackOverflow https://stackoverflow.com/questions/6097766

  •  09-09-2020
  •  | 
  •  

Вопрос

Будет ли эта работа правильно?(см. Пример)

unique_ptr<A> source()
{
    return unique_ptr<A>(new A);
}


void doSomething(A &a)  
{  
    // ...
}  

void test()  
{  
    doSomething(*source().get());   // unsafe?
    // When does the returned unique_ptr go out of scope?
}
.

Это было полезно?

Решение

Генеракодицетагкод, возвращенный из функции не имеет возможности, потому что область применяется только к именам.

В вашем примере срок службы временного генеракодицетагкода заканчивается на точку с запятой.(Итак, да, это будет работать должным образом.) В общем, временный объект разрушается, когда полное выражение, которое лексически содержит RValue, чья оценка создала, что временный объект полностью оценен.

Другие советы

Временные значения разрушаются после оценки «полного выражения», которое (примерно) самое большое прилагающее выражение - или в этом случае все это утверждение.Так что это безопасно;Unique_ptr разрушен после доходности дозможно.

Это должно быть хорошо.Рассмотрим

int Func()
{
  int ret = 5;

  return ret;
}

void doSomething(int a) { ... }


doSomething(Func());
.

Даже если вы возвращаетесь в стек, все в порядке, потому что он в пределах призыва.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top