Skip to content

Instantly share code, notes, and snippets.

@pengdu
Created August 9, 2023 10:54
Show Gist options
  • Save pengdu/1093e97fe8bf5708b4932a2f8076e6a7 to your computer and use it in GitHub Desktop.
Save pengdu/1093e97fe8bf5708b4932a2f8076e6a7 to your computer and use it in GitHub Desktop.
chatgpt实现unique_ptr

要实现一个类似于 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 类可能需要实现更多的功能,例如拷贝构造函数、赋值运算符等,以及处理异常和空指针等情况。

希望对你有帮助!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment