我有一个重载=运算符的变量缓冲区。这个变量在lambda中使用,并通过指针传递。当我想使用这个运算符时,我会这样做:
*buf=CreateBuffer(w, h, type, c);然而,它取消了对指针的引用,并在作用域结束时调用析构函数,这是不应该发生的。
所以为了防止调用析构函数,我这样做了:
buf->operator=(CreateBuffer(w, h, type, c));在没有这个长版本的情况下,有没有其他要实现=运算符的常规约定?
发布于 2017-04-21 19:05:39
指针上的
执行运算符
您的运算符不是为指针重载的,而是为指向类型重载的。因此,您不能“对指针执行运算符”。要在指向的对象上执行运算符,必须使用*或->取消对指针的引用。
,但是它解除了对指针的引用,析构函数在作用域的末尾被调用,这不应该发生。
取消引用指针不会导致调用析构函数,除非您对operator*有一个奇怪的重载(如果buf是原始指针,而不是包装类,则不会有重载)。
我怀疑,您正在观察临时的析构函数,它是由于从CreateBuffer转换为decltype(*buf)而创建的,尽管没有mcve是不可能确定的。
https://stackoverflow.com/questions/43540919
复制相似问题