2

假设我们有一个静态创建的对象 ( Type mObject;),它通过使用 getObject() 方法向程序员公开。我想知道以这种方式获取对象的优点和缺点是什么?

Type* SomeClass::getObject() {
    return &mObject;
}

// the programmer types
Type* obj = someClassObj.getObject();
obj->someMethod();

这样:

Type& SomeClass::getObject() {
    return mObject;
}

// the programmer types
Type& obj = someClassObj.getObject();
obj.someMethod();
4

2 回答 2

5

在纯 C++ 中,我们很少使用指针。特别是原始指针。

大多数代码处理对象实例。由于 C++ 有通过身份引用它们的引用,与 C 不同,获取地址和传递指针是为必须的情况保留的。喜欢:

  • 当您希望 NULL 表示缺席时
  • 当你想切换到不同的对象时(重新分配指针)
  • 当您转让所有权时

您的示例不适合任何类别,因此您使用参考。这会向用户传达对象将始终存在的消息。所以修复obj的时间很少,你可以继续someClassObj.getObject().someMethod()。第一种情况需要在两者之间进行 NULL 检查。

于 2013-06-02T10:06:32.653 回答
1

返回一个指针会引发很多歧义/问题(它可以是 NULL 吗?必须delete是它吗?),而返回对这个静态实例的引用会引入保证。也就是说,该对象将始终被分配并始终返回一个实例(从技术上讲,如果您在初始化期间访问它,则可能不会构造该静态实例)。

虽然它是实现定义的,但我所知道的所有实现在通过引用传递时(在最坏的情况下)都使用“底层”指针。因此,除非必须引入副本或促销,否则使用参考不会增加成本。

在这种情况下,您应该返回一个引用。在大多数 C++ 圈子中,当引用提供您需要的所有功能时,引用比指针更受青睐。

于 2013-06-02T10:38:58.757 回答