在C++中,我们可以通过私有化智能指针的构造函数和拷贝构造函数,以及将智能指针类声明为友元类来阻止直接创建智能指针对象。下面是一个示例代码:
#include
template
class smart_ptr {
private:
T* ptr;
smart_ptr(T* p) : ptr(p) {} // 私有构造函数
public:
smart_ptr() : ptr(nullptr) {} // 默认构造函数
~smart_ptr() { delete ptr; } // 析构函数
// 友元声明
template
friend smart_ptr make_smart_ptr(U* p);
// 禁用拷贝构造函数
smart_ptr(const smart_ptr& other) = delete;
// 禁用赋值操作符
smart_ptr& operator=(const smart_ptr& other) = delete;
T* operator->() const { return ptr; }
};
template
smart_ptr make_smart_ptr(T* p) {
return smart_ptr(p);
}
int main() {
smart_ptr o1 = make_smart_ptr(new int()); // 编译错误,禁止直接创建智能指针对象
return 0;
}
在上面的代码中,我们将智能指针的构造函数声明为私有,这样就不能直接创建智能指针对象。通过友元函数make_smart_ptr
来创建智能指针对象,该函数可以访问智能指针的私有构造函数。同时,我们还禁用了拷贝构造函数和赋值操作符,以防止智能指针对象的拷贝和赋值。这样,就可以达到不允许直接创建智能指针对象的目的。
上一篇:不想用ubuntu系统了