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

标签 c++ operator-overloading unique-ptr

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

在标题中:

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)++;

关于C++:使用 std::unique_ptr 访问重载 operator++ 的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59524408/

相关文章:

c++ - 一个简单类模板的c++17中的 friend 流运算符

perl - 在 perl 中重载运算符

c++ - 自制 vector 类的重载 = 运算符

c++ - 无法在 C++ 中使用 unique_ptr 返回派生类型

c++ - 当在 vector 上使用调整大小时, vector 内部结构中的 unique_ptr 不会编译

c++ - 使用 boost 时出现问题,无法打开共享对象文件

c++ - 用 C/C++ 包装 Mac OS X 特定代码的宏

C++ 是否 reinterpret_cast 总是返回结果?

c++ - 如何编写自替换/更新二进制文件?

C++ : Handle thread-local object destruction