千家信息网

wxWidgets第二课 DECLARE_NO_COPY_CLASS 禁止类的拷贝

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,说明在defs.h文件中,对该宏进行了如下的定义#define DECLARE_NO_COPY_CLASS(classname) \wxDECLARE_NO_COPY_CLASS(classname)
千家信息网最后更新 2025年01月23日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头文件,会引起编译错误,需要慎用


0