c++创建对象,堆,栈。。。

今天写作业 :o ,想通过写一个函数createLine来创建一条直线于是开写

m_line* CGrahamView::createLine(CPoint i, CPoint j)
{
m_line* line;
line->i=i;
line->j=j;
line->a=i.y-j.y;
line->b=j.x-i.x;
line->c=i.x*j.y-j.x*i.y;
return line;
}

FUCK出错了。。而且是内存问题,后来找到了这段函数,想了想,发现栈中的m_line对象貌似已经消亡,返回的指针指向的对象不存在。。。怎么该。。想了想别用指针了于是乎写了下面的代码

m_line CGrahamView::createLine(CPoint i, CPoint j)
{
//m_line *line=new m_line();
m_line line;
line.i=i;
line.j=j;
line.a=i.y-j.y;
line.b=j.x-i.x;
line.c=i.x*j.y-j.x*i.y;
return line;
}


成功了,发现好土,真的好土,不过可以实现,因为return 的是line的复本。有没有什么高端的方法去实现呢。

m_line* CGrahamView::createLine(CPoint i, CPoint j)
{
m_line *line=new m_line();
line->i=i;
line->j=j;
line->a=i.y-j.y;
line->b=j.x-i.x;
line->c=i.x*j.y-j.x*i.y;
return line;
}


看似很专业的写法,堆中创建对象,呵呵,但是发现在函数体外部想delete返回的指针编译出错。。看来编译器无法识别指针指向的对象。。额,这样的话堆中对象无法回收,内存泄漏了。。。再看


m_line CGrahamView::createLine(CPoint i, CPoint j)
{
m_line *line=new m_line();
line->i=i;
line->j=j;
line->a=i.y-j.y;
line->b=j.x-i.x;
line->c=i.x*j.y-j.x*i.y;
return *line;
}


返回堆中对象的复本,显然堆中对象已经找不到了,失败,再看

m_line& CGrahamView::createLine(CPoint i, CPoint j)
{
m_line *line=new m_line();
line->i=i;
line->j=j;
line->a=i.y-j.y;
line->b=j.x-i.x;
line->c=i.x*j.y-j.x*i.y;
return *line;
}
m_line& line=createLine(pt1,pt2);
m_line *p=&line;
delete p;


按别名返回,但是有一个问题,P指向的对象不存在,别名line为空,所以当我们对line操作时,会出现异常,这种异常既不会使程序崩溃,而且不易察觉
最后。。发现其实想要创建一个对象,何不写一个类,然后把代码写在构造函数里呢。。真是白学了。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值