Snowming04's Blog
一颗红❤
Toggle navigation
Snowming04's Blog
主页
Cobalt Strike
Accelerated C++
区块链安全
友链
关于我
常用工具
代码积累
归档
标签
【Accelerated C++】课时11:定义抽象数据类型
? C++ ?
2020-04-13 19:22:59
607
0
0
snowming
? C++ ?
# 0x01 内存分配 要为数组动态分配内存,我们可能希望用 `new T[n]` 为 Vec 分配空间,其中 `n` 是我们要为其分配内存的对象数目。但是要记住,`new T[n]` 不仅分配内存空间,还会运行 `T` 的构造函数来为元素进行默认初始化。如果我们打算使用 `new T[n]`,那么必须满足一个要求:只有在 T 具有默认的构造函数时才能创建一个 `Vec<T>`。 ## 构造函数 设计「内存管理函数」,也就是对 data(向量头指针)与 limit(向量尾指针)进行初始化以及相关的内存分配、设置初值等操作函数。 ``` template<class T> class Vec { public: Vec(){create();} explicit Vec(size_type n, const T& val=T()){create(n,val);} //其他保留接口 private: T* data; T* limit; }; ``` ## 索引与大小   >注:通过这个返回的引用我们可以修改 Vec 类型对象中所储存的数据。可以直接对元素进行写操作。   # 0x02 复制控制 ## copy constructor  ## 值传递和按值调用  ## 赋值运算符      # 0x03 析构函数    ## uncreate 函数的功能有两个: 1. 删除旧元素 2. 释放旧的内存 # 0x04 默认操作   # 0x05 「三位一体」规则(rule of three)  在管理资源的类中使用默认操作可能的错误有: 1、内存泄漏  2、   **4个必须定义的管理资源的函数:**   这4个函数在标准库类中都帮忙写好了,所以标准库函数中的类,比如`vector`、`list`不用自己定义此4个函数。但是自定义一些需要管理资源的类的话就需要去写这4个函数,不然默认生成的可能会出错。比如内存泄漏、多个指针共用同个内存等。这是C/C++区别于其他高级语言的地方。既给出了更为底层的内存管理权,也更麻烦(使用者角度)、更危险。 三位一体规则:  -------------------- # 0x06 动态的Vec类型对象  ## C++ 标准库中提供的管理内存的类  这个 `allocator<T>` 类和 `new` 运算符分配内存的区别是: - `new` 运算符在分配新的内存空间的同时,还会对新内存进行初始化。 - allocator 不会主动对新内存进行初始化,调用其成员函数才会。  # 0x07 小结  
上一篇:
【Accelerated C++】课时12:使类对象像一个数值一样工作
下一篇:
劫持安全狗更新服务进行权限维持
0
赞
607 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
提交评论
立即登录
, 发表评论.
没有帐号?
立即注册
0
条评论
More...
文档导航
没有帐号? 立即注册