首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

析构函数出了有关问题!

2013-11-29 
析构函数出了问题!!请求帮助请看下面这个程序,运行时析构函数那里出了问题,求大神解决啊!#include iostre

析构函数出了问题!!请求帮助
请看下面这个程序,运行时析构函数那里出了问题,求大神解决啊!
#include <iostream>
using namespace std;

class object
{
public:
object(){
ptr1=new int;
ptr2=new int;
cout<<"Constructor"<<endl;}
~object(){
delete ptr1;
delete ptr2;
cout<<"Destructor"<<endl;}
int* ptr1;
int* ptr2;
};

int main()
{
int i=1,j=2;
object* ptr=new object;
ptr->ptr1=&i;
ptr->ptr2=&j;
cout<<*(ptr->ptr1)<<" "<<*(ptr->ptr2)<<endl;
delete ptr;
return 0;
};
[解决办法]
错误1:试图用delete释放栈上的内存
错误2:内存泄露
[解决办法]
ptr->ptr1=&i;
ptr->ptr2=&j;
改成
*(ptr->ptr1) = i;
*(ptr->ptr2) = j;

楼主这是作考试题 呢?
[解决办法]
我突然想起来,您这个例子很有意义,能够解释清楚“为什么把成员变量直接暴露是不安全的”。
[解决办法]
瞅着这代码好危险啊!
[解决办法]
暴露成员数据太危险了....
[解决办法]
如果只是单纯的使析构函数没有问题的话,可以这样改:


#include <iostream>
using namespace std;

class object
{
public:
object(int i, int j){
ptr1=new int(i);
ptr2=new int(j);
cout<<"Constructor"<<endl;}
~object(){
delete ptr1;
delete ptr2;
cout<<"Destructor"<<endl;}
int* ptr1;
int* ptr2;
};

int main()
{
int i=1,j=2;
object* ptr=new object(1, 2);
//ptr->ptr1=&i;
//ptr->ptr2=&j;
cout<<*(ptr->ptr1)<<" "<<*(ptr->ptr2)<<endl;
delete ptr;
return 0;
};

热点排行