return new Item_base(*this)怎么解释
return new Item_base(*this)如何解释?
我在看C++ Primer第四版的中文版,在507页看关于句柄内容,其中有个用于复制未知类型的clone函数,代码如下:
class Item_base{
public:
virtual Item_base* clone() const
{
return new Item_base(*this);
}
};
class Bulk_item{
public:
Bulk_item* clone() const
{
return new Bulk_item(*this);
}
};
其中return new Item_base(*this);返回的是函数局部变量的指针么?这样的话不是在函数执行完毕后new出来的资源就撤销了么?
应该怎么解释呢?最好能告诉我这个规则在C++ Primer第四版什么位置,多谢各位大虾!
------解决方案--------------------
返回是一个指针,这个对象是动态分配出来的
保存这个指针的地方释放这个指针.
------解决方案--------------------
返回的是一个 指针,这个指针指想 new 出来的一段空间
这个空间需要用delete去释放
函数退出,这个指针指向的空间是不会释放的,要你手动去delete
所以,你在外面得到这个返回的指针用完的时候自己释放
------解决方案--------------------
楼主都看到这么后面了,却还对返回函数里new的指针还没搞清楚,说明前面看得不认真,基本上书上习题都没做。
需要回过头去看第二遍。
------解决方案--------------------
Bulk_item a;
Bulk_item* b;
b=a.clone();
...
delete b;
------解决方案--------------------
指针是局部的,
但是这个指针被return了,只要外部有一个接收指针,
那么就可以正常 delete ...
------解决方案--------------------
return new Item_base(*this);
==============
堆上申请一个Item_base类对象,并以本对象(this指针所指对象)初始化构造之,返回这个新对象的在堆上的地址,外部一个指针接收这个地址,即可释放内存不会造成不良影响
------解决方案--------------------
return new Item_base(*this);
==============
返回由构造函数构造的对象指针
我在看C++ Primer第四版的中文版,在507页看关于句柄内容,其中有个用于复制未知类型的clone函数,代码如下:
class Item_base{
public:
virtual Item_base* clone() const
{
return new Item_base(*this);
}
};
class Bulk_item{
public:
Bulk_item* clone() const
{
return new Bulk_item(*this);
}
};
其中return new Item_base(*this);返回的是函数局部变量的指针么?这样的话不是在函数执行完毕后new出来的资源就撤销了么?
应该怎么解释呢?最好能告诉我这个规则在C++ Primer第四版什么位置,多谢各位大虾!
------解决方案--------------------
返回是一个指针,这个对象是动态分配出来的
保存这个指针的地方释放这个指针.
------解决方案--------------------
返回的是一个 指针,这个指针指想 new 出来的一段空间
这个空间需要用delete去释放
函数退出,这个指针指向的空间是不会释放的,要你手动去delete
所以,你在外面得到这个返回的指针用完的时候自己释放
------解决方案--------------------
楼主都看到这么后面了,却还对返回函数里new的指针还没搞清楚,说明前面看得不认真,基本上书上习题都没做。
需要回过头去看第二遍。
------解决方案--------------------
Bulk_item a;
Bulk_item* b;
b=a.clone();
...
delete b;
------解决方案--------------------
指针是局部的,
但是这个指针被return了,只要外部有一个接收指针,
那么就可以正常 delete ...
------解决方案--------------------
return new Item_base(*this);
==============
堆上申请一个Item_base类对象,并以本对象(this指针所指对象)初始化构造之,返回这个新对象的在堆上的地址,外部一个指针接收这个地址,即可释放内存不会造成不良影响
------解决方案--------------------
return new Item_base(*this);
==============
返回由构造函数构造的对象指针