C++:使用 std::unique_ptr 访问重载运算符++的最佳方式?

C++: Best way to access overloaded operator++ with std::unique_ptr?

本文关键字:运算符 方式 重载 最佳 访问 std 使用 unique ptr C++      更新时间:2023-10-16

如果我有一个带有重载运算符++的类,例如:

在标题中:

SomeClass& operator++(int);

实现:

SomeClass& SomeClass::operator++(int) { someLocalVar++; return this; }

如果我随后在std::unique_ptr中实例化SomeClass

std::unique_ptr<SomeClass> someClass(new SomeClass());

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

someClass.get()->operator++(0);

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

SomeClass *ptrSomeClass = someClass.release();
ptrSomeClass++;

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

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

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

std::unique_ptr<SomeClass> someClass(new SomeClass);
...
someClass->operator++(0);

或:

std::unique_ptr<SomeClass> someClass(new SomeClass);
...
(*someClass)++;