举一个shared_ptr代码的例子
时间: 2023-03-25 14:02:23 浏览: 102
可以举一个shared_ptr的例子:
```
#include <iostream>
#include <memory>
int main() {
std::shared_ptr<int> p1(new int(5));
std::shared_ptr<int> p2 = p1;
std::cout << "p1: " << *p1 << std::endl;
std::cout << "p2: " << *p2 << std::endl;
*p1 = 10;
std::cout << "p1: " << *p1 << std::endl;
std::cout << "p2: " << *p2 << std::endl;
return ;
}
```
这个例子中,我们创建了两个shared_ptr指向同一个int类型的对象,然后我们修改了其中一个指针所指向的对象的值,发现另一个指针所指向的对象的值也发生了变化。这是因为shared_ptr是一种智能指针,它会自动管理所指向的对象的内存,当没有指针指向这个对象时,它会自动释放这个对象的内存。同时,它还会记录有多少个指针指向这个对象,当最后一个指针被销毁时,它才会释放这个对象的内存。
相关问题
能不能举一个shared_ptr代码例子
当然可以,下面是一个 shared_ptr 的代码例子:
```
#include <iostream>
#include <memory>
int main() {
std::shared_ptr<int> ptr1(new int(10));
std::shared_ptr<int> ptr2 = ptr1;
std::cout << "ptr1: " << *ptr1 << std::endl;
std::cout << "ptr2: " << *ptr2 << std::endl;
ptr1.reset(new int(20));
std::cout << "ptr1: " << *ptr1 << std::endl;
std::cout << "ptr2: " << *ptr2 << std::endl;
return ;
}
```
这个例子中,我们创建了两个 shared_ptr 对象 ptr1 和 ptr2,它们都指向一个 int 类型的对象,值为 10。然后我们将 ptr2 初始化为 ptr1,这样它们就共享同一个对象。接着,我们通过 ptr1.reset() 函数将 ptr1 指向一个新的 int 对象,值为 20。此时,ptr2 仍然指向原来的对象,值为 10。
一个shared_ptr如何指向多个对象? 应该如何实现。举个例子
一个shared_ptr只能指向一个对象,因为它的设计初衷就是用于管理动态分配的单个对象的内存。如果需要管理多个对象的内存,可以考虑使用其他容器类,如vector,list等。
举个例子,假设有一个类B:
```
class B {
public:
B() { cout << "B constructor called." << endl; }
~B() { cout << "B destructor called." << endl; }
};
```
可以使用如下代码来演示使用vector来管理多个B对象的情况:
```
vector<shared_ptr<B>> vec;
shared_ptr<B> ptr1(new B()); // 第一个shared_ptr指向B对象1
shared_ptr<B> ptr2(new B()); // 第二个shared_ptr指向B对象2
vec.push_back(ptr1); // 将ptr1添加到vector中
vec.push_back(ptr2); // 将ptr2添加到vector中
```
在上述代码中,使用vector容器来管理多个shared_ptr,每个shared_ptr指向一个B对象。vec[0]指向B对象1,vec[1]指向B对象2。当vector被析构时,所有的B对象都会被自动销毁。
阅读全文