C++标准是否允许将析构函数声明为final?像这样:classDerived:publicBase{...virtual~Derived()final;}如果是这样,那是否会阻止派生类的声明:classFurtherDerived:publicDerived{//allowed?}如果允许,编译器是否可能发出警告?将析构函数声明为final是否是一个可行的习惯用法,用于指示一个类不打算用作基类?(有nopointindoingthisinaultimatebaseclass,只有派生类。) 最佳答案 MayaC++destruct
C++标准是否允许将析构函数声明为final?像这样:classDerived:publicBase{...virtual~Derived()final;}如果是这样,那是否会阻止派生类的声明:classFurtherDerived:publicDerived{//allowed?}如果允许,编译器是否可能发出警告?将析构函数声明为final是否是一个可行的习惯用法,用于指示一个类不打算用作基类?(有nopointindoingthisinaultimatebaseclass,只有派生类。) 最佳答案 MayaC++destruct
有没有办法在未命名的类中声明构造函数或析构函数?考虑以下voidf(){struct{//someimplementation}inst1,inst2;//fimplementation-usageofinstances}后续问题:实例当然是作为任何基于堆栈的对象构造(和销毁)的。什么叫?它是编译器自动分配的错误名称吗? 最佳答案 最简单的解决方案是将命名的结构实例作为成员放入未命名的实例中,并将所有功能放入命名实例中。这大概是唯一兼容C++98的方式了。#include#includeintmain(){struct{struct
有没有办法在未命名的类中声明构造函数或析构函数?考虑以下voidf(){struct{//someimplementation}inst1,inst2;//fimplementation-usageofinstances}后续问题:实例当然是作为任何基于堆栈的对象构造(和销毁)的。什么叫?它是编译器自动分配的错误名称吗? 最佳答案 最简单的解决方案是将命名的结构实例作为成员放入未命名的实例中,并将所有功能放入命名实例中。这大概是唯一兼容C++98的方式了。#include#includeintmain(){struct{struct
#includeusingnamespacestd;classCPolygon{protected:intwidth,height;public:virtualintarea(){return(0);}};classCRectangle:publicCPolygon{public:intarea(){return(width*height);}};有编译警告Class'[C@1a9e0f7'hasvirtualmethod'area'butnon-virtualdestructor如何理解这个警告以及如何改进代码?[EDIT]这个版本现在正确吗?(试图给出答案以阐明自己的概念)#inc
#includeusingnamespacestd;classCPolygon{protected:intwidth,height;public:virtualintarea(){return(0);}};classCRectangle:publicCPolygon{public:intarea(){return(width*height);}};有编译警告Class'[C@1a9e0f7'hasvirtualmethod'area'butnon-virtualdestructor如何理解这个警告以及如何改进代码?[EDIT]这个版本现在正确吗?(试图给出答案以阐明自己的概念)#inc
在C++中,如果我们将类析构函数定义为:~Foo(){return;}在调用这个析构函数时,Foo的对象会被销毁还是不会从析构函数显式返回意味着我们不想销毁它。我想让某个对象仅通过另一个对象析构函数被销毁,即仅当另一个对象准备好被销毁时。例子:classClass1{...Class2*myClass2;...};Class1::~Class1(){myClass2->status=FINISHED;deletemyClass2;}Class2::~Class2(){if(status!=FINISHED)return;}我在网上搜索,似乎找不到我的问题的答案。我也试过自己用调试器逐步
在C++中,如果我们将类析构函数定义为:~Foo(){return;}在调用这个析构函数时,Foo的对象会被销毁还是不会从析构函数显式返回意味着我们不想销毁它。我想让某个对象仅通过另一个对象析构函数被销毁,即仅当另一个对象准备好被销毁时。例子:classClass1{...Class2*myClass2;...};Class1::~Class1(){myClass2->status=FINISHED;deletemyClass2;}Class2::~Class2(){if(status!=FINISHED)return;}我在网上搜索,似乎找不到我的问题的答案。我也试过自己用调试器逐步
寻找C#和C++的答案。(在C#中,将'destructor'替换为'finalizer') 最佳答案 它适用于C#(参见下面的代码),但不适用于C++。usingSystem;classTest{Test(){thrownewException();}~Test(){Console.WriteLine("Finalized");}staticvoidMain(){try{newTest();}catch{}GC.Collect();GC.WaitForPendingFinalizers();}}这会打印“Finalized”
寻找C#和C++的答案。(在C#中,将'destructor'替换为'finalizer') 最佳答案 它适用于C#(参见下面的代码),但不适用于C++。usingSystem;classTest{Test(){thrownewException();}~Test(){Console.WriteLine("Finalized");}staticvoidMain(){try{newTest();}catch{}GC.Collect();GC.WaitForPendingFinalizers();}}这会打印“Finalized”