编写一个智能指针的类模版,使其支持各种类对象指针的自动释放,并且写出使用的例子
时间: 2023-06-13 20:05:53 浏览: 52
好的,以下是一个简单的智能指针类模板的实现,它可以支持各种类对象指针的自动释放:
```c++
template<class T>
class SmartPointer {
public:
SmartPointer(T* ptr) : m_ptr(ptr) {}
~SmartPointer() {
delete m_ptr;
}
T* operator->() const {
return m_ptr;
}
T& operator*() const {
return *m_ptr;
}
private:
T* m_ptr;
};
```
这个类模板中,我们将需要管理的指针作为构造函数的参数传递进来,并在析构函数中释放指针所指向的内存。同时,我们还重载了 `->` 和 `*` 运算符,以便可以像操作普通指针一样操作智能指针。
下面是一个使用智能指针的例子:
```c++
#include <iostream>
#include <string>
using namespace std;
class Person {
public:
Person(const string& name) : m_name(name) {
cout << "Constructing Person: " << m_name << endl;
}
~Person() {
cout << "Destructing Person: " << m_name << endl;
}
void greet() const {
cout << "Hello, I'm " << m_name << endl;
}
private:
string m_name;
};
int main() {
SmartPointer<Person> p(new Person("Alice"));
p->greet();
(*p).greet();
return 0;
}
```
在这个例子中,我们使用智能指针 `SmartPointer` 来管理一个 `Person` 类对象的指针。当智能指针 `p` 超出作用域时,它会自动释放它所管理的指针,从而避免了内存泄漏的问题。
当我们运行这个程序时,可以看到以下输出:
```
Constructing Person: Alice
Hello, I'm Alice
Hello, I'm Alice
Destructing Person: Alice
```
从输出中可以看出,`Person` 类对象被正确地构造和析构了,并且智能指针 `p` 成功地管理了它所指向的对象。