首页 > 代码库 > wxWidgets第二课 DECLARE_NO_COPY_CLASS 禁止类的拷贝
wxWidgets第二课 DECLARE_NO_COPY_CLASS 禁止类的拷贝
说明
在defs.h文件中,对该宏进行了如下的定义
#define DECLARE_NO_COPY_CLASS(classname) \
wxDECLARE_NO_COPY_CLASS(classname);
而wxDECLARE_NO_COPY_CLASS的实际定义如下:
#define wxDECLARE_NO_COPY_CLASS(classname) \
private: \
classname(const classname&); \
classname& operator=(const classname&)
从上述的宏定义展开来看,将类的拷贝构造函数和等号操作运算符设置为私有成员函数,禁止了类外的任何拷贝。
用法
class BaseFrame
{
DECLARE_NO_COPY_CLASS(BaseFrame)
public:
BaseFrame();
virtual ~BaseFrame();
};
展开如下:
class BaseFrame
{
private:
BaseFrame(const BaseFrame&);
BaseFrame& operator=(const BaseFrame&)
public:
BaseFrame();
virtual ~BaseFrame();
};
注意
在头文件中,函数的参数列表中的变量名并不重要,可以不写,函数的声明和实现的列表变量名可以不一样,但是变量的类型必须保持一致
IMPLEMENT_DYNAMIC_CLASS
代码
#define IMPLEMENT_DYNAMIC_CLASS(n,b) wxIMPLEMENT_DYNAMIC_CLASS(n,b)
// Single inheritance with one base class
#define wxIMPLEMENT_DYNAMIC_CLASS(name, basename) \
wxIMPLEMENT_CLASS_COMMON1(name, basename, name::wxCreateObject) \
wxObject* name::wxCreateObject() \
{ return new name; }
说明
对运行时类信息的支持,主要是确定一个对象是否属于一特定类的实现,或者从某一特定类派生出来的
该宏定义对于引入windows.h头文件,会引起编译错误,需要慎用
wxWidgets第二课 DECLARE_NO_COPY_CLASS 禁止类的拷贝