繁体   English   中英

具有指针参数的功能

[英]function with pointer parameters

我无法在标题中明确说明我的问题,但确实如此。

void DChatbox::ClampObject(DTextbox _txtbox) {

    this->_txtbox = &_txtbox;

}

这个只是创建一个_txtbox的副本而不引用它。

但是这个有效。

void DChatbox::ClampObject(DTextbox* _txtbox) {

    this->_txtbox = _txtbox

}

当我检查第一个时,它只是复制它,而不引用它。 为什么会这样呢?

注意: _txtbox上的DChatbox声明为此DTextbox* _txtbox

在第一种情况下, DTextbox指针成员分配一个DTextbox对象的地址,该对象位于函数的本地,并且保证仅在函数作用域{ }结束之前有效。
当您在函数DChatbox::ClampObject之外引用this->_txtbox ,得到的是Undefined Behavior

在第二种情况下,将指针成员分配给传递给函数的对象的地址,并且可能( 很难说,除非显示调用它的代码 ),该对象传递给函数的寿命对于程序来说足够长正常工作,因此正常工作。

那是因为第一个版本按值传递参数,即它复制整个对象。 完成该方法后,它仅删除副本。 因此,该方法完成后,该本地对象的地址无效,因为它指向已删除的对象。

第二种版本使用指针传递参数,因此指针引用的是真实对象,而不是对象的副本。 因此,完成该方法后,指针的值仍与指向仍然存在的对象的值相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM