在C++中,句柄类(Handle class)通常用于封装对资源(如文件、网络连接、内存等)的引用。为了实现封装,我们需要确保对资源的访问是安全和可控的。以下是一个简单的句柄类示例,展示了如何实现封装:
#include <iostream> #include <memory> // 资源基类 class Resource { public: virtual ~Resource() = default; virtual void use() = 0; }; // 具体资源类 class ConcreteResource : public Resource { public: void use() override { std::cout << "Using the resource." << std::endl; } }; // 句柄类 class Handle { public: // 构造函数,接受一个指向资源的指针 explicit Handle(Resource* resource) : resource_(resource) {} // 析构函数,释放资源 ~Handle() { delete resource_; } // 禁止拷贝构造和拷贝赋值 Handle(const Handle&) = delete; Handle& operator=(const Handle&) = delete; // 移动构造和移动赋值 Handle(Handle&& other) noexcept : resource_(other.resource_) { other.resource_ = nullptr; } Handle& operator=(Handle&& other) noexcept { if (this != &other) { delete resource_; resource_ = other.resource_; other.resource_ = nullptr; } return *this; } // 使用资源 void use() const { if (resource_) { resource_->use(); } else { std::cout << "Resource is not available." << std::endl; } } private: Resource* resource_; }; int main() { // 创建一个具体资源 ConcreteResource* resource = new ConcreteResource(); // 使用句柄类封装资源 Handle handle(resource); handle.use(); // 句柄类负责管理资源的生命周期,确保资源被正确释放 return 0; } 资源基类和具体资源类:定义了一个资源基类 Resource 和一个具体资源类 ConcreteResource。具体资源类实现了资源的使用方法。
句柄类:
resource_ 中。use 来访问资源。如果资源指针为空,则输出提示信息。通过这种方式,句柄类实现了对资源的封装,确保了资源的安全管理和正确使用。