返回信息流我不是楼主啊,原楼主删帖了。
=== 以下是原答案
我想了下,在我的知识范围内,B类要使用A类,有包含和继承两种方式。
鉴于A类是完善的,一定考虑了被继承的情况,我还翻了下虚析构函数,然而并没有用,还是会正常释放,而包含就更正常了。
如果是B中有同名变量覆盖了A,讲道理应该算是B的问题。
那么,A如此完善,要有破绽只能是它的析构函数没有工作,比如B包含A的指针,new了A然后没有释放?
坐等暖神。。
这是一条镜像帖。来源:北邮人论坛 / cpp / #94606同步于 2017/2/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
Re: 问个和指针有关的问题
liyi5133
2017/2/27镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
继承和虚函数是一方面,如果是类B调用类A的API的这种呢。
【 在 liyi5133 的大作中提到: 】
: 我想了下,在我的知识范围内,B类要使用A类,有包含和继承两种方式。
: 鉴于A类是完善的,一定考虑了被继承的情况,我还翻了下虚析构函数,然而并没有用,还是会正常释放,而包含就更正常了。
: 如果是B中有同名变量覆盖了A,讲道理应该算是B的问题。
: ...................
啊。。我回答里面就最后一行是可能的啊,前面继承和虚函数什么的,鉴于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的这种呢。
也是,完善这两个字太操蛋了...
【 在 liyi5133 的大作中提到: 】
: 啊。。我回答里面就最后一行是可能的啊,前面继承和虚函数什么的,鉴于A的完善,我找不出来岔子。
: 调用A的接口也是一样的吧,既然它完善,开放接口一定做好了应对了。
: 我想到的只有A本身是被B new出来的,像这样:
: ...................
"有个设计完善的类A,在A类创建的时候有个指针,分配了内存,在B类中使用A类是否会有危险。"
这句话信息量太小了。什么叫”设计完善“?只提到”有个指针“,还有”分配了内存“,并没有提这个指针和这个内存是什么关系,以及这个内存是怎么使用的。还有B类中什么叫“使用”A类也需要解释。
有道理。看来这道题不是个好问题...不纠结了。
【 在 nuanyangyang 的大作中提到: 】
: "有个设计完善的类A,在A类创建的时候有个指针,分配了内存,在B类中使用A类是否会有危险。"
: 这句话信息量太小了。什么叫”设计完善“?只提到”有个指针“,还有”分配了内存“,并没有提这个指针和这个内存是什么关系,以及这个内存是怎么使用的。还有B类中什么叫“使用”A类也需要解释。