gpt4 book ai didi

c++ - 你为什么要在 C++ 中创建一个指向原始类型的唯一指针?

转载 作者:搜寻专家 更新时间:2023-10-31 02:07:55 24 4
gpt4 key购买 nike

我刚刚找到这段代码,谁知道它来自何时何地,但它是一个函数的结尾,它没有返回一个简单的 int64_t 类型,而是为它创建了一个 unique_ptr。

我只是想知道是否有人可以解释这种用法的值(value)在哪里?

return std::make_unique<int64_t>(off);

更新:

它不是以这种方式使用的,但正如我在下面评论的那样,指向基元的指针与仅基元的一种可能用途是您可以将指针设置为 null 并因此向整数添加一个标志作为错误或不可用。

最佳答案

将原始类型的变量声明为

int64_t foo;

表示 foo 被放置在堆栈上并且是 block-scoped (即,它在 block 的末尾超出范围)。更正式地使用 C++ 术语它有 automatic storage duration :

The object is allocated at the beginning of the enclosing code block and deallocated at the end. All local objects have this storage duration, except those declared static, extern or thread_local.

另一方面,使用unique_ptr...

auto foo = std::make_unique<int64_t>(off);

... 为堆上的 int64_t 分配内存。正式地,它有 dynamic storage duration :

The object is allocated and deallocated per request by using dynamic memory allocation functions.

您可以通过声明一个指向 int64_t 的指针并使用 new 来自己完成此操作:

int64_t *foo = new int64_t;

但是你必须确保你没有忘记delete那个指针。这就是 unique_ptr 的用武之地。它在超出范围时删除它拥有的指针。这是 RAII .您还可以将所有权转移到不同的 unique_ptr 实例。

关于c++ - 你为什么要在 C++ 中创建一个指向原始类型的唯一指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48193684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com