【发布时间】:2012-09-07 10:19:41
【问题描述】:
我最近遇到了一些看起来像这样的 C++ 代码:
class SomeObject
{
private:
// NOT a pointer
BigObject foobar;
public:
BigObject * getFoobar() const
{
return &foobar;
}
};
我问程序员为什么不把 foobar 做成一个指针,他说这样他就不用担心分配/释放内存了。我问他是否考虑使用一些智能指针,他说这也很有效。
这是不好的做法吗?看起来很hackish。
【问题讨论】:
-
我没有发现任何问题。我不会真的这样做,但我仍然没有看到任何真正的问题。
-
表达式
&foobar不是引用,是成员地址 -
指针通常不好。在这种情况下,代码甚至无法编译,但返回一个 const 引用是完全合适的。
-
你不能“只是”让它成为一个指针;您还必须确保它指向某个对象,并管理该对象的生命周期。
-
@BЈовић:在这个简单的例子中,你是对的;但通常您只想授予只读访问权限,或者在访问时检查和维护不变量,在这种情况下,您确实希望它是私有的。
标签: c++ pointers memory-management reference smart-pointers