是否有类似 post increment 运算符的东西将原点指针设置为null?
通缉行为:
Class MyClass{
public:
int * ptr;
MyClass( MyClass && origin) noexcept;
MyClass(){}
};
MyClass::MyClass( MyClass && origin) noexcept:
ptr(origin.ptr){origin.ptr=nullptr};
需要语义的解决方法:
int * moveptr(int * & ptr){
int * auxptr=ptr;
ptr=nullptr;
return auxptr;
}
MyClass::MyClass( MyClass && origin) noexcept: ptr(moveptr( origin.ptr)){};
也许我错过了标准中的某些内容,但我无法找到代表非所有权的指针类型,但也阻止意外分享指针。
我可以将unique_ptr与一个不做任何事情的自定义删除器一起使用,但是这会使指针的原始赋值变得怪异。
答案 0 :(得分:1)
C ++中没有这样的功能,你必须像moveptr
一样自己编写。使用delete ptr;
的情况也是如此,有些程序员希望将ptr
自动设置为nullptr
,但delete
不会这样做。
某些程序员使用的另一种方法是使用swap
:
MyClass::MyClass( MyClass && origin) noexcept : ptr(nullptr)
{ swap(origin); };
class MyClass {
// ...
inline void swap(MyClass & other) {
using std::swap;
swap(ptr, other.ptr);
}
// ...
};
但在使用它之前,请先阅读它是否值得:
http://scottmeyers.blogspot.com/2014/06/the-drawbacks-of-implementing-move.html