[英]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.