对象指针的副作用
Side Effect on Object Pointer
我可以在这个代码片段中找到问题所在:
我想在函数中重置一个指针,我通过返回指针实现了它的工作,但是我不能让它有副作用(通过指针传递)。
void function(Object * obj)[{
obj = new Object();
cout << obj << endl;
//return obj;
}
main(){
Object * obj = 0;
function(obj);
cout << obj << endl;
}
在这种情况下,结果是:
0x12345678
0
而它应该是
0x12345678
0x12345678
我尝试使用指针的指针或引用的指针,但仍然无法通过函数。虽然只是返回值,但效果很好。但是我需要在几个参数上这样做,代码比这里显示的要复杂得多。
如果你像这样改变你的函数声明,它应该工作:
void function(Object * &obj)
在您的原始代码中,您是按值传递指针,这意味着函数复制了指针,并且函数中指针的任何更改都不会反映出来。当您通过引用传递时,您实际上正在处理原始数据,这可能在幕后使用指针完成。
你可能会想看看这个主题。
通过指针指向指针返回对象(C方式):
void function(Object ** obj) {
*obj = new Object();
}
main(){
Object * obj = 0;
function(&obj);
...
通过引用指针返回对象(c++方式):
void function(Object *& obj) {
obj = new Object();
}
main(){
Object * obj = 0;
function(obj);
...
调用
void function(Object * obj){
你正在复制指针obj,换句话说,"函数"的堆栈现在保存了一个名为obj的指针的本地副本。当函数返回时,此本地副本将被销毁。你可以实现你想要的:
void function(Object* obj&){
将通过引用传递调用者的obj指针。现在,对obj的任何更改也将反映在调用者的作用域中。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 对象指针的副作用
- 在std::vector对象(不是指针)上调用push_back会产生严重的副作用.所以指针会更好