从c ++

时间:2016-04-23 19:38:26

标签: c++ function pointers return

我想问一下从函数返回一个指针。

假设我们有

T *p;

此函数应返回对T对象的引用。但它返回*p,因此它返回一个指向它的值。如果我们写T& operator...T operator...

,那么没有区别吗?
   T& operator*() const{
        if(p)
            return *p;
        throw std::runtime_error("unbound");
    };

正常返回引用和值之间有什么区别?

1 个答案:

答案 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++?