[英]recreate(reassign) a std::shared_ptr or std::unique_ptr
I want to have a managed pointer (unique or shared) and be able to reassign it with new piece of memory and also be sure that old memory is deleted (as it's supposed to be) with managed pointers. 我想要一个托管指针(唯一的或共享的),并能够用新的内存重新分配它,并且还要确保使用托管指针删除了旧的内存(应该是这样)。
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
How would I achieve this in most clean way? 我将如何以最干净的方式实现这一目标?
You have several options: 您有几种选择:
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));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.