我有变量buff,它有重载=运算符。 此变量在lambda中使用并由指针传递。 当我想使用这个操作符时,我会这样做:
*buf=CreateBuffer(w, h, type, c);
然而,取消引用指针和析构函数在范围的末尾被调用,这不应该发生。
所以为了防止析构函数的调用,我做了:
buf->operator=(CreateBuffer(w, h, type, c));
在没有这个长版本的情况下实现=运算符是否有任何其他常规约定?
答案 0 :(得分:1)
在指针上执行operator
您的操作符不会因指针而重载,而是针对指向类型。因此,您无法在指针"上执行运算符。要在指向对象上执行运算符,必须使用*
或->
取消引用指针。
然而,取消引用指针和析构函数在范围的末尾被调用,这不应该发生。
取消引用指针不会导致析构函数被调用,除非你对operator*
有一个奇怪的重载(如果buf
是一个原始指针而不是包装类,你不能拥有它。)< / p>
我怀疑,你正在观察一个临时的析构函数,它是由于从CreateBuffer
转换为decltype(*buf)
而创建的,尽管没有mcve是不可能确定的。