0

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

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

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

谢谢大家。

4

2 回答 2

2

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

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

棘手的事情是管理(堆分配的)对象的所有权,因为您必须在某个地方再次释放内存。换句话说:当你用 分配内存时new,你将不得不用 再次释放它delete

例子:

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

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

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

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

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

从技术上讲,传递指针是按值传递的,因为指针本身会被复制。但是由于指针是“引用类型”,因此您基本上可以通过引用传递。

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

于 2013-10-27T07:07:12.540 回答
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 库将专门使用指针。

大多数人(我认为)尽可能使用参考文献(例如在您的假设示例中)。好消息是,如果您混淆了引用和指针,类型安全将阻止您。

于 2013-10-27T06:43:25.533 回答