首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不取消引用的情况下对指针执行运算符

在不取消引用的情况下对指针执行运算符
EN

Stack Overflow用户
提问于 2017-04-21 18:56:25
回答 1查看 49关注 0票数 0

我有一个重载=运算符的变量缓冲区。这个变量在lambda中使用,并通过指针传递。当我想使用这个运算符时,我会这样做:

代码语言:javascript
复制
*buf=CreateBuffer(w, h, type, c);

然而,它取消了对指针的引用,并在作用域结束时调用析构函数,这是不应该发生的。

所以为了防止调用析构函数,我这样做了:

代码语言:javascript
复制
buf->operator=(CreateBuffer(w, h, type, c));

在没有这个长版本的情况下,有没有其他要实现=运算符的常规约定?

EN

回答 1

Stack Overflow用户

发布于 2017-04-21 19:05:39

指针上的

执行运算符

您的运算符不是为指针重载的,而是为指向类型重载的。因此,您不能“对指针执行运算符”。要在指向的对象上执行运算符,必须使用*->取消对指针的引用。

,但是它解除了对指针的引用,析构函数在作用域的末尾被调用,这不应该发生。

取消引用指针不会导致调用析构函数,除非您对operator*有一个奇怪的重载(如果buf是原始指针,而不是包装类,则不会有重载)。

我怀疑,您正在观察临时的析构函数,它是由于从CreateBuffer转换为decltype(*buf)而创建的,尽管没有mcve是不可能确定的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43540919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档