wxWidgets第二课DECLARE_NO_COPY_CLASS禁止类的拷贝
说明
创新互联建站网站建设公司,提供成都网站制作、网站设计、外贸网站建设,网页设计,建网站,PHP网站建设等专业做网站服务;可快速的进行网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,是专业的做网站团队,希望更多企业前来合作!
在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禁止类的拷贝
标题路径:http://scyanting.com/article/gisgjc.html