返回信息流我使用栈存储一些对象的指针。但是一共有两个栈,里面存放的指针有可能指向相同的对象。
struct obj {
...
};
stack<obj*> s1, s2;
obj* o1 = new obj();
obj* o2 = new obj();
obj* o3 = new obj();
s1.push(o1);
s2.push(o2);
s1.push(o3);
s2.push(o3);
但是问题来了,由于两个栈可以分别压入和弹出,当弹出一个对象的时候,不知道应该还是不应该析构这个对象。如果不析构,万一这是它唯一的指针,内存就泄露了;如果析构,万一另一个栈还留着指针,就产生了悬垂指针。于是就陷入了两难的境地。
这种情况应该怎么处理呢?
这是一条镜像帖。来源:北邮人论坛 / cpp / #79974同步于 2014/5/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
谁有责任释放这个对象的内存呢?
CocoPommel
2014/5/26镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
LS说得是较为简约的方式,从编程者开发效率和可靠性的角度来说引用计数/智能指针是很好的方式。
如果从内存管理的角度来考虑,你需要关注s1和s2的生命周期,按照你的描述,如果仅仅是s1和s2在使用这些obj,那么obj的生命周期应该是与s1和s2至少是相同的才能保证访存的安全性。也就是说,在s1和s2生命周期都结束的时候,你需要回收这些obj。当然,你可以再使用某个Manager来管理这些obj的产生与消亡,那是后续设计上的事情。
BTW,说到责任的问题,内存是编程者new的,使用者有两个且都不是创建者或管理者,回收的责任当然就落到编程者的肩上...当然编程者还可以把责任转嫁到C++库设计者的肩上(引用计数/智能指针管理)。
【 在 buptxrc 的大作中提到: 】
: 看标题觉得是nuanyangyang发的...看IP觉得是nuanyangyang的小号.....蛤蛤
光看标题就觉得是nuanyangyang,爱的深沉啊。
真爱……
【 在 buptxrc 的大作中提到: 】
: 看标题觉得是nuanyangyang发的...看IP觉得是nuanyangyang的小号.....蛤蛤