c++ - 重新创建(重新分配)一个 std::shared_ptr 或 std::unique_ptr

标签 c++ shared-ptr unique-ptr

我想要一个托管指针(唯一的或共享的),并能够用新的内存重新分配它,并确保用托管指针删除旧内存(正如它应该的那样)。

struct MyStruct
{
       MyStruct(signed int) { }
       MyStruct(unsigned float) { }
};
std::unique_ptr<MyStruct> y(new MyStruct(-4)); // int instance
std::shared_ptr<MyStruct> x(new MyStruct(-5));

// do something with x or y
//...


// until now pointers worked as "int" next we want to change it to work as float

x = new MyStruct(4.443);
y = new MyStruct(3.22); // does not work

我如何以最简洁的方式实现这一点?

最佳答案

您有多种选择:

x = std::unique_ptr<MyStruct>(new MyStruct(4.443));
x = std::make_unique<MyStruct>(4.443); // C++14
x.reset(new MyStruct(4.443));

y = std::shared_ptr<MyStruct>(new MyStruct(3.22));
y = std::make_shared<MyStruct>(3.22);
y.reset(new MyStruct(3.22));

关于c++ - 重新创建(重新分配)一个 std::shared_ptr 或 std::unique_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24968642/

相关文章:

c++ - const 成员函数中模板成员的常量

c++ - 访问 vector 中的实例时,shared_ptr 的 vector 给出段错误

c++ - toUniquePtr 实现

c++ - 双指针的 unique_ptr 处理

c++ - .LIB 文件是否需要在 C++ 中调用 DLL 而不是 C# P/Invoke?

c++ - 解析给定字符串中位置的数字

c++ - 调用基类构造函数而不命名其类

c++ - make_shared 和抽象多态性

c++ - pcl 使用共享指针,它会复制吗?

c++ - 非常量对象的 vector 在基于范围的 for 循环中似乎被视为常量