在没有解除引用的情况下在指针上执行operator

时间:2017-04-21 10:56:25

标签: c++ pointers reference

我有变量buff,它有重载=运算符。 此变量在lambda中使用并由指针传递。 当我想使用这个操作符时,我会这样做:

*buf=CreateBuffer(w, h, type, c);

然而,取消引用指针和析构函数在范围的末尾被调用,这不应该发生。

所以为了防止析构函数的调用,我做了:

buf->operator=(CreateBuffer(w, h, type, c));

在没有这个长版本的情况下实现=运算符是否有任何其他常规约定?

1 个答案:

答案 0 :(得分:1)

  

在指针上执行operator

您的操作符不会因指针而重载,而是针对指向类型。因此,您无法在指针"上执行运算符。要在指向对象上执行运算符,必​​须使用*->取消引用指针。

  

然而,取消引用指针和析构函数在范围的末尾被调用,这不应该发生。

取消引用指针不会导致析构函数被调用,除非你对operator*有一个奇怪的重载(如果buf是一个原始指针而不是包装类,你不能拥有它。)< / p>

我怀疑,你正在观察一个临时的析构函数,它是由于从CreateBuffer转换为decltype(*buf)而创建的,尽管没有mcve是不可能确定的。