2

这是我的问题。我有一个指向某个类的分配内存的指针:

Class *pClass = new Class();

现在我想将这个对象传递给某个函数,它会使用这个对象来复制它而不修改它。问题是如何正确传递对象?

void someFunc (const Class &_class);
{
    Class *pClassInFunc = new Class (_class);
    ...
}
...
someFunc (*pClass)

或者

void someFunc (const Class *_class);
{
    Class *pClassInFunc = new Class (*_class);
    ...
}
...
someFunc (pClass)

或者

void someFunc (Class _class);
{
    // just use _class since it's already a copy
    ...
}
...
someFunc (*pClass)

我选择了第一种方式,但对我来说看起来很奇怪,smth告诉我它不正确。第二个看起来更像 C 风格(或不是?)。最后一个在堆栈中创建了一个副本,这是不可取的。那么,最好的解决方案是什么?谢谢您的回答。

编辑:刚刚看到,我在 pClassInFunc 之前忘记了 *。更正了,对不起。

4

1 回答 1

4

我投票支持最后一种方法。设计您的函数,使其不关心调用代码如何分配对象。如果它想要一个副本,请按值获取对象。它使用户的意图更加清晰。

如果他们不再需要它,它还允许调用者从他们的对象中移出。如果您要引用const然后复制它,将不是一个选项(您不能从const对象中移动)。

如果调用代码可以,它应该首先避免动态分配对象。那么,如果选择按值取参数,传递对象就很简单了。

于 2013-05-09T21:27:19.320 回答