博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ Primer Plus 学习笔记 第十六章 string类, 智能指针模板类
阅读量:4127 次
发布时间:2019-05-25

本文共 2493 字,大约阅读时间需要 8 分钟。

使用string类

string类对每个关系运算符都做了重载 并且都以三种方式被重载:

string 与string

string与c-string

c-string 与 string

用心, 赞!

size()和length()都能够返回字符串中的字符数 效果一样

find()

string类的内存分配原理

程序示例

#include 
#include
int main(){ using namespace std; string empty; string small = "bit"; string larger = "Elephants are a girl's best friend"; cout << "Sizes:\n"; cout << "\tempty: " << empty.size() << endl; cout << "\tsmall: " << small.size() << endl; cout << "\tlarger: " << larger.size() << endl; cout << "Capacities:\n";// 查看string对象分配的内存大小 cout << "\tempty: " << empty.capacity() << endl; cout << "\tsmall: " << small.capacity() << endl; cout << "\tlarger: " << larger.capacity() << endl;// 手动设置string对象的内存大小 empty.reserve(50); cout << "Capacity after empty.reserve(50): " << empty.capacity() << endl; return 0;}

运行结果

通过c_str()函数能够将string转换成c风格字符串 返回指向该字符串的指针。

string种类

只能指针模板类

有3种

auto_ptr

unique_ptr

shared_ptr

智能指针模板包含在memory头文件中

示例:

#include 
#include
#include
class Report{ private: std::string str; public: Report(const std::string s) : str(s) { std::cout << "Object created!\n";} ~Report() {std::cout << "Object deleted!\n";} void comment() const {std::cout << str << "\n";}};int main(){ // 我这里的编译器表示木有这货 估计被移除了 // { // std::auto_ptr
ps (new Report("using auto_ptr")); // ps->comment(); // } { std::shared_ptr
ps (new Report("using shared_ptr")); ps->comment(); } { std::unique_ptr
ps (new Report ("using unique_ptr")); ps->comment(); } return 0;}

不要把非堆内存丢到智能指针中去

shared_ptr:策略

示例:

#include 
#include
#include
int main(){ using namespace std; shared_ptr
films[5] = { shared_ptr
(new string("Fowl Balls")), shared_ptr
(new string("Duck Walks")), shared_ptr
(new string("Chicken Runs")), shared_ptr
(new string("Turkey Errors")), shared_ptr
(new string("Goose Eggs")) }; shared_ptr
pwin; pwin = films[2]; cout << "The nominees for best avian baseball film are\n"; for (int i = 0; i < 5; i++) cout << *films[i] << endl; cout << "The winner is " <<*pwin << "!\n"; cin.get(); return 0;}

运行结果

unique_ptr

两个智能指针指向同一个对象的时候 unique_ptr会在编译的时候就报错 而不是在运行阶段

但unique_ptr允许悬挂指针的存在

感觉unique_ptr很费劲 不用悬挂指针吧 用 move()

new[] 的话 使用unique_ptr<>

new 的话 使用 shared_ptr<>, unique_ptr<>

不是new的话 那就再见

 

如何选择智能指针

建议用shared_ptr<>的场景

建议使用uniqure_ptr<>的场景

uniqre_ptr可以转换成shared_ptr

完结

转载地址:http://siepi.baihongyu.com/

你可能感兴趣的文章
过滤器及JSP九大隐式对象
查看>>
软件(项目)的分层
查看>>
菜单树
查看>>
Servlet的生命周期
查看>>
JAVA八大经典书籍,你看过几本?
查看>>
《读书笔记》—–书单推荐
查看>>
JAVA数据类型
查看>>
【Python】学习笔记——-6.2、使用第三方模块
查看>>
【Python】学习笔记——-7.0、面向对象编程
查看>>
【Python】学习笔记——-7.2、访问限制
查看>>
【Python】学习笔记——-7.3、继承和多态
查看>>
【Python】学习笔记——-7.5、实例属性和类属性
查看>>
git中文安装教程
查看>>
虚拟机 CentOS7/RedHat7/OracleLinux7 配置静态IP地址 Ping 物理机和互联网
查看>>
Jackson Tree Model Example
查看>>
常用js收集
查看>>
如何防止sql注入
查看>>
maven多工程构建与打包
查看>>
springmvc传值
查看>>
Java 集合学习一 HashSet
查看>>