我想问一下从函数返回一个指针。
假设我们有
T *p;
此函数应返回对T
对象的引用。但它返回*p
,因此它返回一个指向它的值。如果我们写T& operator...
或T operator...
T& operator*() const{
if(p)
return *p;
throw std::runtime_error("unbound");
};
正常返回引用和值之间有什么区别?
答案 0 :(得分:3)
如果您返回一个值(*p
),您将返回一个新对象,即T& operator...
的副本。如果调用者修改返回的对象,它将不会影响您的属性变量。通过复制返回具有成本(用于创建复制的CPU操作+复制对象的存储器使用)。它还要求T可以使用(提供有效的复制构造函数)。
如果你通过引用(T*
)返回,你将返回对象的地址(最后,它与返回一个poinetr const T&
非常相似,它的成本相同,只有语法使用引用与使用指针的语法不同)。如果调用者修改了返回的引用对象,它将影响您的属性变量(但是,使返回的引用public function showData(){
$m = new MongoClient();
$db = $m->newdb;
$collection = $db->createCollection("signup");
$data = $collection->find();
echo "<pre>";print_r($data);exit;
}
将阻止它)。
参考是优选的(在内存使用方面更快更好),只要您可以保证引用变量保持活动状态,而调用者将使用该引用。例如,如果要返回由函数创建的本地对象,则必须通过复制而不是通过引用返回它。
在此处阅读更多内容:What are the differences between a pointer variable and a reference variable in C++?