请列举一个std::shared_ptr<char>示例
时间: 2023-12-06 20:52:39 浏览: 126
以下是一个std::shared_ptr<char>示例:
```
#include <iostream>
#include <memory>
int main() {
std::shared_ptr<char> ptr(new char[10]);
// 使用 shared_ptr 所管理的内存块
for (int i = 0; i < 10; i++) {
ptr.get()[i] = 'a' + i;
}
// 输出内存块的内容
for (int i = 0; i < 10; i++) {
std::cout << ptr.get()[i] << " ";
}
std::cout << std::endl;
return 0;
}
```
该示例创建了一个长度为10的char数组,并将其传递给std::shared_ptr<char>构造函数。然后,使用std::shared_ptr访问数组中的元素,并输出数组中的内容。当程序结束时,由std::shared_ptr管理的内存将自动释放。
相关问题
std::atomic<std::shared_ptr<T>>示例
std::atomic<std::shared_ptr<T>>是一个原子共享指针,可以在多线程环境下安全地访问和修改共享资源。以下是一个示例:
```
#include <atomic>
#include <iostream>
#include <memory>
#include <thread>
class Foo {
public:
Foo() { std::cout << "Foo constructor" << std::endl; }
~Foo() { std::cout << "Foo destructor" << std::endl; }
void bar() { std::cout << "Foo bar" << std::endl; }
};
std::atomic<std::shared_ptr<Foo>> ptr;
void thread_func() {
std::shared_ptr<Foo> p(new Foo);
ptr.store(p);
std::this_thread::sleep_for(std::chrono::seconds(1));
std::shared_ptr<Foo> q = ptr.load();
q->bar();
}
int main() {
std::thread t(thread_func);
std::shared_ptr<Foo> r = ptr.load();
if (r) {
r->bar();
}
t.join();
return 0;
}
```
在这个示例中,我们创建了一个名为Foo的类,并在其中定义了一个名为bar的方法。然后,我们使用std::atomic<std::shared_ptr<Foo>>定义了一个原子共享指针ptr。在thread_func函数中,我们创建了一个指向Foo对象的共享指针p,并使用ptr.store(p)将其存储到ptr中。然后,我们等待1秒钟,使用ptr.load()获取ptr中存储的共享指针q,并调用它的bar方法。
在主函数中,我们使用ptr.load()获取ptr中存储的共享指针r,并调用它的bar方法。最后,我们使用t.join()等待线程t的结束。
std::shared_ptr<char>的使用
使用std::shared_ptr<char>可以通过不同的方式来进行初始化和操作。你可以使用std::make_shared来创建一个std::shared_ptr<char>对象,这样可以提高效率。比如,你可以这样使用std::make_shared来创建一个指向char类型的智能指针:
std::shared_ptr<char> p = std::make_shared<char>('a');
此外,你还可以使用std::shared_ptr的reset方法来重新指定指针的值。例如,你可以这样使用reset方法:
std::shared_ptr<char> p;
p.reset(new char('b'));
最后,使用std::shared_ptr时,你还可以通过封装make_shared_array方法来支持char数组的使用。这样你就可以创建一个指向char数组的智能指针。例如:
std::shared_ptr<char> p = make_shared_array<char>(10);
这些是使用std::shared_ptr<char>的一些常见操作和用法。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [《c++11学习笔记》 --- 智能指针(std::shared_ptr、std::uniq_ptr、std::weak_ptr)](https://blog.csdn.net/qq_41653875/article/details/121780253)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文