| |||
| 代码:
然后在~B()中去调用~A()这样。还是它在类外调用~A()(调用完~B()之后)?这样编译不过应该是属性后者吧。 这两个析构函数是如何组织的?(如何调用的)。 BTW:为什么class的默认派生是private,而struct的默认派生是public? class的默认派生如果是public也没什么不好啊? |
| |||
| 引用:
operator delete() { ~B(); ~A(); // ... } 还是会把~B()与~A()不放在一起的其它形式调用? 代码:
是protected在B中就是private的也可以直接调用呀?为什么编译不过? 我怎么觉得class 的默认派生用public没有问题呢? 用private会更好吗? |
| |||
| 引用:
|
| ||||
| 引用:
class A{ protected: virtual ~A(){} }; ...... A *pb = new B; delete pb; 这种代码你的GCC编译器竟然放过去了?为什么不在问之前简单的写一个示范代码?这好象不难吧。你不是告诉我你在问之前都仔细考虑过并且百思不得其解了吗?类似这种问题发在这里问,你说是让别人怀疑你在说谎好还是让人怀疑你智商好? 引用:
你懒的看书,这里人家pomb都仔仔细细的给你讲了析构函数的调用顺序了,你自己去看看吧,一次两次可以,你经常这样问,你提高会快吗? 引用:
|
| |||||||
| 引用:
你们有你们的原因,那好像是理所当然,有没有看到我的说的真正的问题的意思吗?我说了那个上面只是警告吧?它是私有的是吧?然后一位好心的同志告诉我说是编译器选项没设的那么严所以让那个delete pb;调用~B()时也过了.那我就想为什么A中的析构函数是protected的然后被派生子类B它不是作为B的private一样吗?那它可以直接就有相当于~B()的一样的身份哪.为何不给这个调用也来个警告然后我可以侥幸的看到运行的程序. 引用:
你的第二句"当然直接 deriverd 实例化是没问题的,这和是否 private 无关"我就没清楚你的意思是什么.因为我不管把哪里搞成private都不成.因为你说和private没关系,那我就搞成它试试看. 引用:
我在怀疑你们有没有知道我问的问题的意思是什么(当然我知道你们不是有这个义务的,所以我没有其它的意思,我还是很高兴大家来说我的不对,因为我会改).还是我的表达真的有问题.我没说我的代码是好的.如果没有说明当然和大家的是一样的.而且我告诉了编译器,上面不是有吗? 引用:
引用:
代码:
至于你说的叫我看pomb回答的,的确,但他回答是在我发这一帖之后啊,你要我把自己的帖子改一下然后说我看了pomb的回答啦.我........... 引用:
不过谢谢各位的回复. zion那里是不会有人回答的么? |
| |||
| 引用:
代码:
代码:
D:\NOTE\DEV\ABP\test.cpp [Warning] In function `int main()': 5 D:\NOTE\DEV\ABP\test.cpp `virtual A::~A()' is protected 14 D:\NOTE\DEV\ABP\test.cpp within this context 不知道我有没有真的看懂. 请指点. |