C++:使用 std::unique_ptr 访问重载 operator++ 的最佳方法?

Van*_*gan 1 c++ operator-overloading unique-ptr

如果我有一个带有重载 operator++ 的类,例如:

在标题中:

SomeClass& operator++(int);
Run Code Online (Sandbox Code Playgroud)

执行:

SomeClass& SomeClass::operator++(int) { someLocalVar++; return this; }
Run Code Online (Sandbox Code Playgroud)

如果我然后SomeClass在一个实例化std::unique_ptr

std::unique_ptr<SomeClass> someClass(new SomeClass());
Run Code Online (Sandbox Code Playgroud)

然后我想打电话给operator++some someClass,我使用:

someClass.get()->operator++(0);
Run Code Online (Sandbox Code Playgroud)

我知道我可以做这样的事情:

SomeClass *ptrSomeClass = someClass.release();
ptrSomeClass++;
Run Code Online (Sandbox Code Playgroud)

但这也很冗长,并且首先违背了使用的目的std::unique_ptr

如果调用一个重载的更好的方法operator++std::unique_ptr

Rem*_*eau 9

与处理指向对象类型的任何其他指针完全相同的方式 - 首先取消对指针的引用,然后将所需的操作应用于所指向的底层对象。 std::unique_ptr已重载->*取消引用运算符以提供与原始指针类似的语义,例如:

std::unique_ptr<SomeClass> someClass(new SomeClass);
...
someClass->operator++(0);
Run Code Online (Sandbox Code Playgroud)

或者:

std::unique_ptr<SomeClass> someClass(new SomeClass);
...
(*someClass)++;
Run Code Online (Sandbox Code Playgroud)