这是否有效使用返回引用?

时间:2016-11-04 15:30:26

标签: c++

假设我定义了这样的结构:

struct point {
   int x;
   int y;
}

const point & clone(point& pt) {
    point * new_pt;
    * new_pt = pt;   // copy info, new is called?
    return *new_pt;
}

我的理解是*new_pt = pt隐式调用new并在堆上为复制的结构分配必要的存储空间,因此new_pt不指向临时变量,我可以返回引用它,是吗?

2 个答案:

答案 0 :(得分:2)

*new_pt = pt很可能不会崩溃(实际上是未定义的行为),因为new_pt没有任何结果。

如果您想动态分配内存,则需要在某个时刻执行new。但是谁会去delete记忆呢?

你的函数应该返回一个对象或shared_ptr(但你还是要做一个新的事情)。

答案 1 :(得分:0)

  

我的理解是* new_pt = pt隐式调用new并在堆上为复制的结构分配必要的存储空间

没有

point * new_pt;

new_pt有一个不确定的价值。

* new_pt = pt;

您正在取消引用new_pt,但它未定义,这意味着您会触发未定义的行为(这很可能会导致崩溃)。

您的代码尝试将值new_pt分配给pt(有效地复制它)。