C++ 一些括号的范围
我有这门课:C++ 一些括号的范围,c++,C++,我有这门课: class CNullDecorator: public CBaseDecorator, public CPooledObject<CNullDecorator> { public: CNullDecorator(){} virtual~CNullDecorator(){} protected: virtual void __Excute(const CDecoratorData &d){} virtual CBaseDecor
class CNullDecorator: public CBaseDecorator, public CPooledObject<CNullDecorator>
{
public:
CNullDecorator(){}
virtual~CNullDecorator(){}
protected:
virtual void __Excute(const CDecoratorData &d){}
virtual CBaseDecorator *__Clone(CParticleInstance *, CParticleInstance *)
{
return new CNullDecorator;
}
};
类CNullDecorator:公共CBaseDecorator,公共CpooleObject
{
公众:
CNullDecorator(){}
虚拟~cnulldecotor(){}
受保护的:
虚空执行(const CDecoratorData&d){
虚拟CBaseDecorator*\uuu克隆(CParticleInstance*,CParticleInstance*)
{
返回新的CNullDecorator;
}
};
正如您所看到的,cnulldecotor(){}
和virtual~cnulldecotor(){}
打开了一些括号,但括号内没有任何内容。我的问题是为什么?
哪个作用域有括号?它们是不做任何事情的内联函数。你本来可以的
CNullDecorator () { return ; }
并获得相同的效果。
{}
定义函数体。在您的情况下,这必然意味着cnulldecontor()
(构造函数)、~cnulldecontor()
(析构函数)和\u Excute()
(受保护的方法)没有主体,即它们什么都不做
编辑:(回答评论中提出的问题)
如果没有使用CNULLDecotor。或者构造函数或析构函数永远不会 已使用且刚刚定义我可以删除它吗
构造函数和析构函数(以及其他一些东西)是C++编译器默认情况下提供的,以防程序员忽略它们。在您的情况下,构造函数可以被删除,因为它什么也不做,但是您创建的析构函数是虚拟的(虽然是空的),因此您必须保持它的行为方式
更多关于虚拟析构函数的信息。首先,它不是括号,而是大括号 所有作用域都有大括号。但有些范围比其他范围更特殊。函数是一个完整的作用域。在这种情况下:
CNullDecorator(){}
这声明了一个空构造函数,一个没有代码的构造函数。通常,您将有一个构造函数执行以下操作:
CNullDecorator()
{
// Some code here. Initialize this to that. Call some other
// function
}
假装括号里有代码。现在您有了一个典型的构造函数。但实际上,没有什么东西需要在构造函数中包含任何代码。所以,如果你不使用它,你会有一组空的大括号
这真的没有什么用处。您可以完全省略构造函数,编译器将很乐意为您提供它。这是风格的问题
另一方面,析构函数之所以如此是有原因的:
virtual ~CNullDecorator(){}
这还声明了一个空的析构函数,并且不包含任何代码
但在这种情况下,这是有原因的。与构造函数类似,如果完全省略析构函数,编译器将提供默认析构函数
但是这个声明做了更多的事情:它声明了一个虚拟析构函数
在这种情况下,这个类所需要的只是一个虚拟析构函数。虚拟析构函数不需要执行任何显式操作,因此其内容为空。但是,该类需要一个虚拟析构函数,因此必须声明它。大括号是一种括号,不是吗?如果不使用cnulldecotor。或者从来没有使用过构造函数或析构函数,只是定义了它。我可以删除它吗?建议您编辑您的问题以包含上述查询,而不是在注释中询问它。