方式一:shared_ptr<string> pTom{new string("tom")}; 方式二:shared_ptr<string> pTom; pTom.reset(new string("tom")); 方式三:shared_ptr<string> pTom = make_shared<string>("tom"); 推荐:使用方式三,更快(一次复制),更安全 使用 shared_ptr<string> pTom = make_shared<string>("tom");...
为了构建一个std::shared_ptr对象,却进行了两次内存分配,而且第二次内存分配分配的内存还比较小,这一方面会影响程序性能,另一方面还会大大增加内存碎片产生的可能性。 使用std::make_shared的std::shared_ptr构造 std::make_shared的精妙之处就在于,它将std::shared_ptr构造中的两次内存分配降低到了一次。这会对提...
std::shared_ptr<int> sp(newint[10], std::default_delete<int[]>()); 也可以使用一下的lambda表达式来自定义删除函数 std::shared_ptr<int> sp(newint[10], [](int*p) {delete[] p; }); 实际上,除非需要共享目标,否则unique_ptr更适合使用数组: std::unique_ptr<int[]> up(newint[10]);/...
使用shared_ptr<void>代替void*可以解决声明周期管理的问题。shared_ptr有足够的类型信息以了解如何正确销毁它指向的对象。 structday{ // ...things... std::shared_ptr<void> user_data; }; structmonth{ std::vector<day> days; std::shared_ptr<void> user_data; }; ... some_day.user_data = st...
std::shared_ptr 是一种智能指针,它能够记录多少个 shared_ptr 共同指向一个对象,从而消除显示的调用 delete,当引用计数变为零的时候就会将对象自动删除。 std::shared_ptr 可以通过 get() 方法来获取原始指针,通过 reset() 来减少一个引用计数, 并通过use_count()来查看一个对象的引用计数。例如: ...
std::shared_ptr<Test> p(new Test); 1. 2. (6) std::shared_ptr的大小是原始指针的两倍,因为它的内部有一个原始指针指向资源,同时有个指针指向引用计数。 (7)引用计数是分配在动态分配的,std::shared_ptr支持拷贝,新的指针获可以获取前引用计数个数。
数组:C++支持静态数组和动态数组(通过new[])。 容器:std::vector(动态数组)、std::list(链表)、std::set(有序集合)、std::map(关联映射)等。 字符串与文本处理: 字符串字面量:const char*类型的字符串字面量。 std::string:C++标准库中的字符串类,提供丰富的字符串操作方法。
string 可以通过 s.c_str() 重新转换回古板的 const char *。 string 在离开作用域时自动释放内存 (RAII),不用手动 free。 (2)C++ 字符串和 C 字符串的不同 C 语言字符串是单独一个 char *ptr,自动以 ‘\0’ 结尾。 C++ 字符串是 string 类,其成员有两个:char *ptr; size_t len; 第二个成员用...
std::unique_ptr release的使用 2019-11-22 15:33 −在c++中,动态内存管理是通过new/delete 运算符来进行的。由于确保在正确的时间释放内存是很困难的,为了避免内存泄漏,更加容易,安全地使用动态内存,C++11标准库提供了两种智能指针类型来管理动态对象。只能指针的行为类似于常规指针,重要的区别是它负责自动释放所...
std::string_view 是 std::basic_string_view 针对 char 类型的特化。std::basic_string_view 提供了泛型的字符串视图功能,而 std::string_view 是在处理标准字符时最常用的形式。 std::string_view 的设计意图是作为一个轻量级的、非拥有型的对字符串(或字符序列)的视图。这个类型本质上是对原始字符串数据的...