mirror of
https://github.com/Nekrolm/ubbook.git
synced 2025-12-18 13:14:41 +03:00
Update direct_initialization_references.md
This commit is contained in:
@@ -97,6 +97,26 @@ auto parent_widget = std::make_unqiue<Widget>(read_config());
|
||||
```
|
||||
|
||||
|
||||
|
||||
Нужно еще отметить, что продление жизни работает только при инициализации объектов аллоцированных на стеке. Если же вы создаете объект на куче/в собственном буфере с помощью `operator new`
|
||||
```C++
|
||||
// https://godbolt.org/z/7Y5brzGKv
|
||||
struct S {
|
||||
const std::string& s;
|
||||
};
|
||||
|
||||
int main() {
|
||||
auto bad = new S { "hellooooooooooooooooooooooo0000000" };
|
||||
return bad->s.length();
|
||||
}
|
||||
```
|
||||
То успешно получите висячую ссылку. GCC 14 молчит. Clang 19 выдает предупреждение
|
||||
```
|
||||
<source>:10:25: warning: temporary bound to reference member of allocated object will be destroyed at the end of the full-expression [-Wdangling-field]
|
||||
10 | auto bad = new S { "hellooooooooooooooooooooooo0000000" };
|
||||
```
|
||||
|
||||
|
||||
## Значения по умолчанию для ссылочных полей
|
||||
|
||||
Закончить, пожалуй, нужно еще одним недоразуменинем с ссылочными полями. Им же можно задать значения по умолчанию...
|
||||
|
||||
Reference in New Issue
Block a user