取消引用指向对象的指针以使用重载的运算符

时间:2015-02-01 23:13:49

标签: pointers object operators

所以,我有一个带有重载的postfix ++运算符的类。我想在动态分配的对象上使用该运算符,如下所示。但是,我只发现了两个选项,而且它们似乎都没有。我觉得我错过了一些操作员超载或其他东西。这样做有更正确/优雅/更清洁的方式吗?我知道那些是非常自以为是的话......我一直在寻找一段时间,但与这些论坛上的大多数人相比,我对c ++的了解相当有限。谢谢!

Date * today = new Date();

today->operator++(); //option 1

(*today)++; //option 2

1 个答案:

答案 0 :(得分:0)

首先,您的两个选项并不相同。选项1调用operator ++()的前缀形式,Option 2调用后缀形式。然后等效选项2

++(*today);

通常,假设Date类的这些运算符是以惯用方式实现的,我更喜欢这种形式,因为postfix表单引入了一个临时表单而前缀表单不会。

哪个更优雅或更干净?这是主观的。不同的人有不同的意见。

但是,您的示例使用指针和动态内存分配(operator new)。除非使用operator delete显式释放对象,否则会导致内存泄漏。在许多C ++指南中,主动不鼓励这样做(注释:在某些其他编程语言中,这可能被认为是很好的技术,但通常不会用C ++)。

我将使用的方法是简单地定义Date类型的对象,而不是指针。

Date today;    // look ma!   This is not a pointer.

++today; //option 2, but prefix form

通过这种简单的更改,不需要(明确地)取消引用任何指针,并且由于只有一个操作,因此不需要额外的大括号来对事物进行分组。它还有一个优点,即对象today将在超出范围时隐式释放(例如,当函数返回时),因此该技术不会引入内存泄漏。

这使事情更简单,可以被认为更清洁,更优雅。