【发布时间】:2013-05-28 16:28:22
【问题描述】:
假设我们有一个静态创建的对象 (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();
【问题讨论】:
-
以前的 API 几乎鼓励程序员在处理完对象后调用
delete,或者至少让他想知道如何清理。 -
在第一种情况下,您必须记录谁拥有返回的指针,并希望客户阅读文档。请注意,两者都存在 const 正确性问题。
-
在第一种情况下你可以返回NULL,所以调用者需要检查这个。
-
如果您“允许”您的类的用户修改返回的对象(成员),则使用引用或指针。但是,如果您不需要那种“行为”,最好只返回成员的副本。
-
@MarkGarcia 我认为你错了(或者我可能没有理解你的意思。)引用和指针可以是
const,因此不允许修改(以清晰易懂的方式。 ) 并且返回一个副本确实not 不允许修改,它只是意味着用户正在修改的对象与您持有的对象不同!此外,返回副本的缺点是必须复制对象。考虑返回一个按值持有的百万元素向量(这意味着一个副本,而不是移动。)
标签: c++