gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:10:46 24 4
gpt4 key购买 nike

我有变量 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com