在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
来访问资源。如果资源指针为空,则输出提示信息。通过这种方式,句柄类实现了对资源的封装,确保了资源的安全管理和正确使用。