【发布时间】:2016-09-05 15:26:09
【问题描述】:
是否有类似于 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 与不执行任何操作的自定义删除器一起使用,但这会使指针的原始分配变得奇怪。
【问题讨论】:
-
多写一行
rhs.p = nullptr真的很麻烦吗? -
这不是打扰,而是忘记做。
-
无论如何这是惯用的做法,我怀疑它有任何预制解决方案
标签: pointers c++11 move-semantics