该不该这样删除这个指针

northsnake 2001-02-08 07:19:00
有两个类:CMyclass1,CMyclass2
class CMyclass1:public CObject
{
...
public:
CMclass2* p
..
}
我在CMclass1的成员函数里使用此指针访问CMclass2的变量,问题是:
我在CMclass1的析构函数里delete p,这样作会不会出问题呢?
...全文
412 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
northsnake 2001-02-09
  • 打赏
  • 举报
回复
谢谢各位,我要给分
cb1010 2001-02-09
  • 打赏
  • 举报
回复
你对p的声明如果
1-使用 new 操作,那么将自动调用class1的构造函数。
2-使用 malloc函数 则不调用class1的构造函数
初学者要注意呦!!
cb1010 2001-02-09
  • 打赏
  • 举报
回复
当然没有问题。
因为p是class2的成员变量,虽然类型是class1但是毕竟还是属于class2呀!
一个类要是不好看的话就换个名字
-构造中 new *char;
-析构中 delete char;
是不是没问题?只要class1得悉构函数没问题,就没事。
就好像一个人类,一个男人类,男人属于人类,但是不等于一个男人死了人类就不存在或者是人类要乱套。
再有,new/delete是堆操作,如果你的class1的构造函数、或者是使用过程中用到了new最好也把相应的delete写到class1的析构中。
northsnake 2001-02-08
  • 打赏
  • 举报
回复
我只是简单声明了p,没有构造
northsnake 2001-02-08
  • 打赏
  • 举报
回复
对,我所访问的变量都不是new出的,是CMclass的共有变量或者函数。谢谢各位
xlfrd 2001-02-08
  • 打赏
  • 举报
回复
"我在CMclass1的成员函数里使用此指针访问CMclass2的变量"
我想你所访问的变量也就不是NEW 出来的了,CMclass2中的变量是在栈中分配的,当类析构的时候会自动释放,在CMclass1的析构函数里delete p可能会有两种后果,一是delete检查出该指针不是堆中内存,直接返回。其二可能就是未知的结果了。不管怎样,用一个指针去释放另一个类中的变量是不对的
bnj 2001-02-08
  • 打赏
  • 举报
回复
delete NULL不会有问题,但若p的对象不是new来的,delete p就有问题了
要小心
YuHao 2001-02-08
  • 打赏
  • 举报
回复
rocmeteor的话不太对吧,delete一个NULL指针不会引起问题,至少ANSI C标准是这么说的.
心念不空过 2001-02-08
  • 打赏
  • 举报
回复
在delete p之前记得要加一句if (p != NULL)
否则在p == NULL时delete会完蛋的。
沒有名字 2001-02-08
  • 打赏
  • 举报
回复
你自己小心了,

在你delete p后,切记马上来一句 p=NULL;

这样,即使其他地方不小心再次delete p ;也不会引起大的麻烦 ,因为p已经是空指针了。
yuanhl78 2001-02-08
  • 打赏
  • 举报
回复
在c++中,delete是和new配套使用用与控制堆中内存块的,单独使用delete或把它作用与栈都是危险的。这是第一。第二,CMclass2* p只是声明一个指针,并没有为这个指针分配内存,我想知道的您是如何在构造器里初始化的,如果初始对象是动态创建的,那么delete非但不会有问题反而是必须的。
yuanhl78 2001-02-08
  • 打赏
  • 举报
回复
在c++中,delete是和new配套使用用与控制堆中内存块的,单独使用delete或把它作用与栈都是危险的。这是第一。第二,CMclass2* p只是声明一个指针,并没有为这个指针分配内存,我想知道的您是如何在构造器里初始化的,如果初始对象是动态创建的,那么delete非但不会有问题反而是必须的。
stzhou 2001-02-08
  • 打赏
  • 举报
回复
关键在于p是在那里new的,这很重要
hadron 2001-02-08
  • 打赏
  • 举报
回复
我想当然:应该不会!
你最好跟踪调试一下。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧