自己实现 C++ 的智能指针可以通过封装一个类来实现,代码:
```cpp
template<typename T>
class SmartPointer {
public:
SmartPointer(T* ptr) : m_ptr(ptr), m_refCount(new int(1)) {}
~SmartPointer() {
release();
}
SmartPointer(const SmartPointer<T>& other) : m_ptr(other.m_ptr), m_refCount(other.m_refCount) {
(*m_refCount)++;
}
SmartPointer<T>& operator=(const SmartPointer<T>& other) {
if (this != &other) {
release();
m_ptr = other.m_ptr;
m_refCount = other.m_refCount;
(*m_refCount)++;
}
return *this;
}
T* operator->() const {
return m_ptr;
}
T& operator*() const {
return *m_ptr;
}
private:
void release() {
(*m_refCount)--;
if (*m_refCount == 0) {
delete m_ptr;
delete m_refCount;
}
}
private:
T* m_ptr;
int* m_refCount;
};
```
使用该智能指针类时,可以像使用原始指针一样操作,例如:
```cppSmartPointer<int> sp1(new int(5));
SmartPointer<int> sp2 = sp1;
std::cout << *sp1 << std::endl; // 输出 5std::cout << *sp2 << std::endl; // 输出 5
*sp2 = 10;
std::cout << *sp1 << std::endl; // 输出 10
std::cout << *sp2 << std::endl; // 10
```
这个简单的示例实现了一个基本的智能指针类,通过引用计数来管理资源的释放。当最后一个指针离开作用域时,会自动释放资源。
实际上,C++11 标准已经提供了 `std::shared_ptr` 和 `std::unique_ptr` 等智能指针类,建议使用标准库提供的智能指针类,以避免自己实现智能指针时可能出现的问题。