使用指针和引用获取对象

时间:2013-06-02 08:49:04

标签: c++

让我们假设我们有一个静态创建的对象(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();

2 个答案:

答案 0 :(得分:5)

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

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

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

您的示例不适合任何类别,因此您使用引用。这会向用户传达一个对象将始终存在的信息。因此,大部分时间都没有必要修复obj,你可以继续使用someClassObj.getObject().someMethod()。第一种情况需要在它们之间进行NULL检查。

答案 1 :(得分:1)

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

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

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