使用自定义对象作为结构函数的默认参数,会造成内存泄露吗
使用自定义对象作为构造函数的默认参数,会造成内存泄露吗?
以上windows构造函数中使用了自定义对象作为默认参数,请问这个new 的默认参数需要手动delete释放吗?如果要、在哪做释放?以上类在使用过程中会造成内存泄露吗? 初学C++,求大神指教。
------解决思路----------------------
如果用默认参数会造成泄露,如果在构造函数里释放那就意味着实参必须也是new出来的,否则就会出错,这种代码写出来就是雷区。。。
------解决思路----------------------
肯定会有内存泄露呀, 这是最基本的呀
隐式销毁一个内置指针类型的成员不会delete它所指向的对象.
只要你在类里面使用了内置指针来new对象, 那么你就需要写析构函数, 并且要delete了
------解决思路----------------------
为何不把windows的构造函数改为
------解决思路----------------------
1.new和delete一定配对使用,无论是“同居”还是“异居”,都要配对。不配对,就是泄露
2.new出的对象传参数进去的,可以在函数内部使用完销毁,也可以函数返回到主调函数中销毁
比如这样
class Size
{
int _height;
int _width;
public:
Size(int height=10, int width=10):_height(height),_width(width){}
int getHeight()
{
return _height;
}
int getWidth()
{
return _width;
}
};
class Coordinate{
int _x;
int _y;
public:
Coordinate(int x=0, int y=0):_x(x),_y(y){}
int getX()
{
return _x;
}
int getY()
{
return _y;
}
};
class Windows{
string _title;
Size _size;
Coordinate _coordinate;
public:
Windows(const string tiltle ="defaultWindows",
const Size* size = new Size(10,10) ,
const Coordinate* coordinate = new Coordinate(10,20))
:_title(tiltle),_size(*size),_coordinate(*coordinate){}
void setTiltle(const string& title);
string getTitle();
void setSize(const Size& size);
Size& getSize();
void setCoordinate(const Coordinate& coordinate);
Coordinate& getCoordinate();
void show();
};
以上windows构造函数中使用了自定义对象作为默认参数,请问这个new 的默认参数需要手动delete释放吗?如果要、在哪做释放?以上类在使用过程中会造成内存泄露吗? 初学C++,求大神指教。
------解决思路----------------------
如果用默认参数会造成泄露,如果在构造函数里释放那就意味着实参必须也是new出来的,否则就会出错,这种代码写出来就是雷区。。。
------解决思路----------------------
肯定会有内存泄露呀, 这是最基本的呀
隐式销毁一个内置指针类型的成员不会delete它所指向的对象.
只要你在类里面使用了内置指针来new对象, 那么你就需要写析构函数, 并且要delete了
------解决思路----------------------
为何不把windows的构造函数改为
Windows(const string tiltle ="defaultWindows",
const Size& size = Size(10,10) ,
const Coordinate& coordinate = Coordinate(10,20))
------解决思路----------------------
1.new和delete一定配对使用,无论是“同居”还是“异居”,都要配对。不配对,就是泄露
2.new出的对象传参数进去的,可以在函数内部使用完销毁,也可以函数返回到主调函数中销毁
比如这样
fun(new obj)/./fun内部delete
obj *tmp = new obj;
fun(tmp);//可以fun内部delete,否则,下面方式销毁
delete tmp;//fun外销毁