tvm::runtime::ObjectPtr
#
tvm::runtime::ObjectPtr
是自定义智能指针的实现,用于管理 tvm::runtime::Object
;它接受模板参数 T
,表示内容数据的类型。
ObjectPtr
类提供了一些成员函数和算子重载,以支持对象的创建、拷贝、移动和析构等运算。以下是对其中一些重要成员函数和算子的解读:
默认构造函数
ObjectPtr()
和ObjectPtr(std::nullptr_t)
分别创建空指针和指向空指针的对象。拷贝构造函数
ObjectPtr(const ObjectPtr& other)
和ObjectPtr(const ObjectPtr<U>& other)
允许将一个对象赋值给另一个对象,其中U
是T
的派生类型。在拷贝构造函数中,使用了静态断言来确保只能进行子类到父类的赋值。移动构造函数
ObjectPtr(ObjectPtr&& other)
和ObjectPtr(ObjectPtr<Y>&& other)
允许将一个对象移动到另一个对象,其中Y
是T
的派生类型。同样,在移动构造函数中,使用了静态断言来确保只能进行子类到父类的移动。析构函数
~ObjectPtr()
负责释放指针所指向的对象的资源。交换运算符
void swap(ObjectPtr& other)
用于交换两个对象的内容。解引用运算符
T* operator->() const
返回指向对象内容的指针。取引用运算符
T& operator*() const
返回指向对象内容的引用。拷贝赋值运算符
ObjectPtr& operator=(const ObjectPtr& other)
和移动赋值运算符ObjectPtr& operator=(ObjectPtr&& other)
分别用于拷贝或移动一个对象到另一个对象。空指针检查运算符
explicit operator bool() const
返回一个布尔值,指示指针是否为空。重置函数
void reset()
将指针内容设置为空指针。使用计数函数
int use_count() const
返回指针的使用计数,用于调试目的。唯一性检查函数
bool unique() const
检查指针是否唯一,即没有其他对象共享该指针。相等性比较运算符
bool operator==(const ObjectPtr& other) const
和不等性比较运算符bool operator!=(const ObjectPtr& other) const
分别用于比较两个对象是否相等或不相等。空指针比较运算符
bool operator==(std::nullptr_t null) const
和不等于运算符bool operator!=(std::nullptr_t null) const
分别用于检查指针是否为空或非空。
此外,还定义了一些私有成员变量和辅助函数,用于管理内部指针字段的创建、引用计数的增加和减少等操作。
总体而言,这个自定义智能指针提供了一种方便的方式来管理对象,并提供了常见的操作和功能,如拷贝、移动、重置和唯一性检查等。