std::shared_ptr<unsigned int> 如何在构造时赋值
时间: 2024-01-21 09:03:25 浏览: 72
可以使用 std::make_shared 函数来构造并赋值 std::shared_ptr,示例如下:
```
auto ptr = std::make_shared<unsigned int>(42);
```
这将创建一个值为 42 的 unsigned int,并将其存储在堆上,然后构造一个 std::shared_ptr 来管理该内存,并将该指针赋值给 ptr。这种方式比使用 new 来手动分配内存并构造 std::shared_ptr 更加安全和简便。
相关问题
std::shared_ptr<unsigned int> 如何在构造时赋值, 不使用std::make_shared
可以使用 std::shared_ptr 的构造函数来构造并赋值 std::shared_ptr,示例如下:
```
unsigned int* p = new unsigned int(42);
std::shared_ptr<unsigned int> ptr(p);
```
这将创建一个值为 42 的 unsigned int,并将其存储在堆上,然后构造一个 std::shared_ptr 来管理该内存,并将该指针赋值给 ptr。需要注意的是,这种方式需要手动分配内存,因此需要手动释放内存,否则会导致内存泄漏。
```
delete p;
```
另外,也可以使用 std::shared_ptr 的 reset 成员函数来修改 std::shared_ptr 所管理的指针,示例如下:
```
std::shared_ptr<unsigned int> ptr;
unsigned int* p = new unsigned int(42);
ptr.reset(p);
```
这将创建一个值为 42 的 unsigned int,并将其存储在堆上,然后将该指针赋值给 ptr。需要注意的是,如果 ptr 已经管理了其他指针,将会释放该指针所指向的内存。
std::shared_ptr<unsigned char[]> 构造时赋值一个字符串
可以使用以下方式来构造一个包含字符串的 `shared_ptr<unsigned char[]>`:
```c++
#include <memory>
#include <cstring>
int main() {
const char* str = "Hello, World!";
size_t len = std::strlen(str) + 1; // +1 for null terminator
std::shared_ptr<unsigned char[]> bytes(new unsigned char[len]);
// Copy the string into the buffer
std::memcpy(bytes.get(), str, len);
return 0;
}
```
这里,我们使用 `std::strlen` 函数获取字符串的长度,并为缓冲区分配足够的空间(包括空终止符)。然后,我们使用 `std::memcpy` 函数将字符串复制到缓冲区中。最后,我们将 `bytes` 指定为 `shared_ptr<unsigned char[]>`,这将自动管理缓冲区的内存。
阅读全文