在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
來訪問資源。如果資源指針為空,則輸出提示信息。通過這種方式,句柄類實現了對資源的封裝,確保了資源的安全管理和正確使用。