我有变量 buff,它重载了 = 运算符。 此变量在 lambda 中使用并通过指针传递。 当我想使用这个运算符时,我会这样做:
*buf=CreateBuffer(w, h, type, c);
然而,它取消引用指针并在范围末尾调用析构函数,这是不应该发生的。
所以为了防止调用析构函数,我这样做:
buf->operator=(CreateBuffer(w, h, type, c));
如果没有这个长版本,是否有任何其他常规约定来实现 =operator?
最佳答案
execute operator on pointer
您的运算符不是针对指针重载,而是针对指针类型重载。因此,您不能“在指针上执行运算符”。要在指向的对象上执行运算符,您必须使用 *
或 ->
取消引用指针。
However it dereferences pointer and destructor is called at the end of scope which shouldn't happen.
取消引用指针不会导致析构函数被调用,除非你对 operator*
有一个奇怪的重载(如果 buf
是一个原始指针,你就不能拥有,而是而不是包装类)。
我怀疑您正在观察一个临时对象的析构函数,它是由于从 CreateBuffer
到 decltype(*buf)
的转换而创建的,尽管这是不可能的确保没有 mcve .
关于c++ - 在指针上执行运算符而不取消引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43540919/