在c ++中传递对象之间的指针

时间:2013-10-27 06:40:37

标签: c++ pointers

我想问一下在函数之间或对象之间传递指针或返回它们。我听说通常传递或返回指针(无论它们指向数组还是对象或它们指向的任何对象)都不安全并且不保证输出。

现在我已经尝试了,到目前为止一切似乎都没问题但是我不希望我的项目偶然工作..所以有人可以向我解释为什么不传递或返回指针以及建议的解决方案是什么(对于例如,如果我想在另一个对象的函数中修改相同的对象(例如 object1 )该怎么办(函数 func object2 ))?

另外,我在教程中读到c ++中的所有内容都是按值传递的?是不是传递指针被称为传递引用?

Thanx大家。

2 个答案:

答案 0 :(得分:2)

  

我想问一下在函数之间或对象之间传递指针或返回它们。我听说通常传递或返回指针(无论它们指向数组还是对象或它们指向的任何对象)都不安全并且不保证输出。

你从哪里得到的?一般来说,这不是真的,当然你可以传递指针。

棘手的是管理(堆分配)对象的所有权,因为某处你必须再次释放内存。换句话说:当您使用new分配内存时,您必须使用delete再次释放内存。

示例:

A* function1(A* a) {
    return a;
}

B* function2(B* b) {
    return new B(b);
}

function1返回现有指针。 拥有传入的A对象的人也将拥有返回的对象,因为它是相同的。这需要记录,因为这些知识对于使用function1

至关重要

function2通过复制其输入参数来创建类B的新对象。调用function2的人将拥有返回的对象,并在完成后对delete负责。同样,这需要记录在案!

  

另外,我在教程中读到c ++中的所有内容都是按值传递的?是不是传递指针被称为传递引用?

从技术上讲,传递指针是按值传递的,因为指针本身被复制。但是因为指针是一个“引用类型”,所以你基本上可以用它来传递引用。

请注意,C ++也知道引用(int&),它实际上是传递引用。

答案 1 :(得分:1)

嗯,诚实的回答是,当人们说“通过引用传递”时,人们有时会说不同的东西。

但一般来说,当人们说“通过参考传递”时,他们的意思是:

void readInt(int &a) {
    cin >> a;
}

int a;
readInt(a);
cout << a;

并且“通过指针传递”将是:

void readInt(int *a) {
    cin >> *a;
}

int a;
readInt(&a);
cout << a;

最终,您可以使用指针来处理所有引用(其他方法通常都是正确的)。

有些人喜欢引用,因为他们可以像往常一样使用.运算符。其他人更喜欢指针,因为它们是明确的。

请注意,指针比引用旧(C没有引用),因此C库将仅使用指针。

大多数人(我认为)尽可能使用引用(如在您的假设示例中)。好的一点是,如果你混淆引用和指针,类型安全会阻止你。