要实现一个类似于 std::unique_ptr
的智能指针类,你需要定义一个类,其中包含一个指向动态分配对象的指针,并实现相应的构造函数、析构函数和其他必要的成员函数。下面是一个简单的示例:
template <typename T>
class UniquePtr {
public:
UniquePtr(T* ptr) : m_ptr(ptr) {}
~UniquePtr() {
delete m_ptr;
}
T* operator->() const {
return m_ptr;
}
T& operator*() const {
return *m_ptr;
}
private:
T* m_ptr;
};
在这个示例中,我们定义了一个名为 UniquePtr
的模板类,模板参数 T
表示指向的对象类型。
类中包含了一个指向动态分配对象的指针 m_ptr
。在构造函数中,我们接受一个指针作为参数,并将其赋值给 m_ptr
。
析构函数负责在对象销毁时释放动态分配的内存,使用 delete
运算符释放 m_ptr
指向的对象。
为了使 UniquePtr
类的使用类似于原始指针,我们重载了箭头运算符 ->
和解引用运算符 *
。这样,我们可以通过 ->
和 *
对象来访问其成员函数和成员变量。
下面是一个使用 UniquePtr
类的示例:
#include <iostream>
class MyClass {
public:
void doSomething() {
std::cout << "Doing something" << std::endl;
}
};
int main() {
UniquePtr<MyClass> ptr(new MyClass());
ptr->doSomething();
return 0;
}
在这个示例中,我们使用 UniquePtr
类创建了一个指向 MyClass
对象的智能指针 ptr
,并通过箭头运算符 ->
调用 MyClass
的成员函数 doSomething
。
需要注意的是,这只是一个简单的示例,实际的 UniquePtr
类可能需要实现更多的功能,例如拷贝构造函数、赋值运算符等,以及处理异常和空指针等情况。
希望对你有帮助!