c++ - 在指针上执行运算符而不取消引用

标签 c++ pointers reference

我有变量 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 是一个原始指针,你就不能拥有,而是而不是包装类)。

我怀疑您正在观察一个临时对象的析构函数,它是由于从 CreateBufferdecltype(*buf) 的转换而创建的,尽管这是不可能的确保没有 mcve .

关于c++ - 在指针上执行运算符而不取消引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43540919/

相关文章:

c++ - 为什么我们需要在 Windows C++ 中链接 kernel32.dll、user32.dll 等...?

c++ - 模板哈希表

c - 遍历 const 矩阵和 vector

c++ - C++ 中的多态性不能正确处理引用

c++ - C++ 中的别名和引用是一回事吗?

c# - 为什么 C# 引用在 NuGet 和 Visual Studio 之间添加不同

C++保存成员函数setf()的返回值

c++ - 编译时警告

C++:取消引用指针

rust - 使用现有可变引用的嵌套方法调用