所以,我有一个带有重载的postfix ++运算符的类。我想在动态分配的对象上使用该运算符,如下所示。但是,我只发现了两个选项,而且它们似乎都没有。我觉得我错过了一些操作员超载或其他东西。这样做有更正确/优雅/更清洁的方式吗?我知道那些是非常自以为是的话......我一直在寻找一段时间,但与这些论坛上的大多数人相比,我对c ++的了解相当有限。谢谢!
Date * today = new Date();
today->operator++(); //option 1
(*today)++; //option 2
答案 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
将在超出范围时隐式释放(例如,当函数返回时),因此该技术不会引入内存泄漏。
这使事情更简单,可以被认为更清洁,更优雅。