假设我定义了这样的结构:
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
不指向临时变量,我可以返回引用它,是吗?
答案 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
(有效地复制它)。