BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #94606同步于 2017/2/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

Re: 问个和指针有关的问题

liyi5133
2017/2/27镜像同步7 回复
我不是楼主啊,原楼主删帖了。 === 以下是原答案 我想了下,在我的知识范围内,B类要使用A类,有包含和继承两种方式。 鉴于A类是完善的,一定考虑了被继承的情况,我还翻了下虚析构函数,然而并没有用,还是会正常释放,而包含就更正常了。 如果是B中有同名变量覆盖了A,讲道理应该算是B的问题。 那么,A如此完善,要有破绽只能是它的析构函数没有工作,比如B包含A的指针,new了A然后没有释放? 坐等暖神。。
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
NachtZ机器人#1 · 2017/2/27
继承和虚函数是一方面,如果是类B调用类A的API的这种呢。 【 在 liyi5133 的大作中提到: 】 : 我想了下,在我的知识范围内,B类要使用A类,有包含和继承两种方式。 : 鉴于A类是完善的,一定考虑了被继承的情况,我还翻了下虚析构函数,然而并没有用,还是会正常释放,而包含就更正常了。 : 如果是B中有同名变量覆盖了A,讲道理应该算是B的问题。 : ...................
liyi5133机器人#2 · 2017/2/27
啊。。我回答里面就最后一行是可能的啊,前面继承和虚函数什么的,鉴于A的完善,我找不出来岔子。 调用A的接口也是一样的吧,既然它完善,开放接口一定做好了应对了。 我想到的只有A本身是被B new出来的,像这样: ```c++ #include <iostream> #include <cstring> using namespace std; class A{ private: int * s; public: A(){ cout << "new A" << endl; s = new int; } A(int i) { cout << "new A" << endl; s = new int; * s = i; } ~A() { cout << "delete A" << endl; delete s; } }; class B{ public: A * a; B(){cout << "new B" << endl;a = new A;}; ~B(){cout << "delete B" << endl;}; }; int main() { for(int i = 0; i < 3; i++) { B b; } return 0; } ``` ```bash new B new A delete B new B new A delete B new B new A delete B ``` 【 在 NachtZ 的大作中提到: 】 : 继承和虚函数是一方面,如果是类B调用类A的API的这种呢。
NachtZ机器人#3 · 2017/2/27
也是,完善这两个字太操蛋了... 【 在 liyi5133 的大作中提到: 】 : 啊。。我回答里面就最后一行是可能的啊,前面继承和虚函数什么的,鉴于A的完善,我找不出来岔子。 : 调用A的接口也是一样的吧,既然它完善,开放接口一定做好了应对了。 : 我想到的只有A本身是被B new出来的,像这样: : ...................
nuanyangyang机器人#4 · 2017/2/27
"有个设计完善的类A,在A类创建的时候有个指针,分配了内存,在B类中使用A类是否会有危险。" 这句话信息量太小了。什么叫”设计完善“?只提到”有个指针“,还有”分配了内存“,并没有提这个指针和这个内存是什么关系,以及这个内存是怎么使用的。还有B类中什么叫“使用”A类也需要解释。
NachtZ机器人#5 · 2017/2/28
有道理。看来这道题不是个好问题...不纠结了。 【 在 nuanyangyang 的大作中提到: 】 : "有个设计完善的类A,在A类创建的时候有个指针,分配了内存,在B类中使用A类是否会有危险。" : 这句话信息量太小了。什么叫”设计完善“?只提到”有个指针“,还有”分配了内存“,并没有提这个指针和这个内存是什么关系,以及这个内存是怎么使用的。还有B类中什么叫“使用”A类也需要解释。
littleneko机器人#6 · 2017/2/28
不懂你在说啥
bond1993机器人#7 · 2017/2/28
不懂+1