首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
usb
cSharp
httprequest
case
utf-8
controller
header
web3
bit
stream
merge
heap
php
flutter
netty
audio
string
frameworks
dll
jar
schema
web
timestamp
list
testing
config
tree
callback
go
nodejs
bash
java
rsa
dockerfile
version
split
shell
int
substring
cmd
settings
uri
solr
char
format
integer
object
datetime
range
emoji
random
jsp
filter
数组
sum
lua
plugins
python
main
yaml
chat
hashtable
typescript
express
replace
javascript
vba
php7
default
js
scala
vbscript
search
email
copy
php5
heatmap
node.js
grid
当前位置:
开发笔记
>
编程语言
> 正文
STL容器中插入对象与指针时的构造及析构函数调用分析
作者:沉沉浮浮触涙水 | 来源:互联网 | 2024-11-27 16:26
本文探讨了在使用STL容器(如map、vector和list)插入自定义类对象或指针时,构造函数和析构函数的调用情况,以及可能引发的问题。
### STL 容器插入对象时的构造函数调用
#### 示例类 `CT` 的定义
```cpp
#include
#include
class CT {
public:
CT() {
std::cout <<"CT::CT()" <
}
CT(const CT&) {
std::cout <<"CT::CT(const CT&)" <
}
~CT() {
std::cout <<"CT::~CT()" <
}
};
```
#### 插入 `map` 容器
```cpp
void main() {
std::map
mval;
CT t;
mval.insert(std::make_pair(1, t));
}
```
- **`make_pair` 函数**:创建一个 `pair` 对象,首次调用复制构造函数 `CT(const CT&)`。
- **`pair` 构造函数**:将 `pair` 对象的两个成员初始化,再次调用复制构造函数 `CT(const CT&)`。
- **`pair` 转换构造函数**:当 `pair` 对象作为参数传递给 `insert` 方法时,第三次调用复制构造函数 `CT(const CT&)`。
- **`map` 内部节点构造**:在 `map` 内部创建节点时,第四次调用复制构造函数 `CT(const CT&)`。
总结:在 `map` 中插入一个类对象时,总共会调用四次复制构造函数和四次析构函数。
### 其他容器的构造函数调用情况
#### `vector` 容器
```cpp
void _Insert_n(iterator _Where, size_type _Count, const _Ty& _Val) {
_Ty _Tmp = _Val; // 首次调用复制构造函数 CT(const CT&)
// 插入逻辑...
}
```
- 在 `vector` 中插入一个类对象时,会调用两次复制构造函数和两次析构函数。
#### `list` 容器
- 在 `list` 中插入一个类对象时,仅调用一次复制构造函数和一次析构函数。
#### `queue` 容器
- 在 `queue` 中插入一个类对象时,同样仅调用一次复制构造函数和一次析构函数。
### 插入指针时的问题
- 当插入的是指针而不是对象本身时,容器内部存储的是指针的副本。如果原始指针指向的内容被释放,容器中的指针将变为野指针,可能导致未定义行为。
### 结论
不同 STL 容器在插入类对象时,其构造函数和析构函数的调用次数有所不同。理解这些调用机制有助于优化代码性能,并避免潜在的内存问题。
容器
const
main
int
insert
ci
struct
tree
char
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
tree
寻找子树中值小于自身节点的最大数量
本文介绍了一种算法,用于在一个给定的二叉树中找到一个节点,该节点的子树包含最大数量的值小于该节点的节点。如果存在多个符合条件的节点,可以选择任意一个。 ...
[详细]
蜡笔小新 2024-11-27 18:08:54
go
C++ 入门教程||C++ 基本语法||C++ 注释
C基本语法C程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。对象-对象具有状态和行为 ...
[详细]
蜡笔小新 2024-11-26 18:03:14
string
雨中避雨问题(HDU2389)—— Hopcroft-Karp 算法应用
题目描述:给定 n 把雨伞和 m 个人,t 分钟后开始下雨。求在每个人只能使用一把雨伞的情况下,最多有多少人可以拿到雨伞。 ...
[详细]
蜡笔小新 2024-11-26 14:35:41
tree
二进制数组构建与遍历二叉树
本文探讨了如何利用数组来构建二叉树,并介绍了通过队列实现的二叉树层次遍历方法。通过具体的C++代码示例,详细说明了构建及打印二叉树的过程。 ...
[详细]
蜡笔小新 2024-11-25 19:31:10
string
详解JLine ConsoleReader.drawBuffer() 方法及其应用实例
本文深入探讨了JLine库中的ConsoleReader.drawBuffer()方法的使用场景和具体实现,通过多个实际代码示例,帮助开发者更好地理解和应用此方法。 ...
[详细]
蜡笔小新 2024-11-27 12:41:57
list
解决CM10.2编译过程中遇到的错误
本文主要解决了在编译CM10.2时出现的关于Samsung Exynos 4 HDMI HAL库中SecHdmiV4L2Utils.cpp文件的编译错误。 ...
[详细]
蜡笔小新 2024-11-26 17:26:47
go
Codeforces 580C:Kefa与公园的路径选择问题
本文探讨了Codeforces 580C题目——Kefa与公园的问题,深入分析了如何在给定条件下帮助Kefa找到合适的餐厅。 ...
[详细]
蜡笔小新 2024-11-26 13:50:23
config
Spring Boot集成与使用JPA详解
本文详细介绍如何在Spring Boot项目中集成和使用JPA,涵盖JPA的基本概念、Spring Data JPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。 ...
[详细]
蜡笔小新 2024-11-27 17:44:54
list
13、单向链表
头文件:LinkList.hLinkList.cmain.cVS2 ...
[详细]
蜡笔小新 2024-11-27 14:45:45
go
Activity跳转动画 无缝衔接
Activity跳转动画 无缝衔接 ...
[详细]
蜡笔小新 2024-11-27 11:40:35
list
electronvue使用electronupdater实现自动更新
今天呢,给大家带来一篇干货满满的electron-vue自动升级的教程,话不多说,开始我的表演!配置文件package.jsonbu ...
[详细]
蜡笔小新 2024-11-26 19:07:21
tree
时序数据库的应用与设计策略
时序数据是指按时间顺序排列的数据集。通过时间轴上的数据点连接,可以构建多维度报表,揭示数据的趋势、规律及异常情况。 ...
[详细]
蜡笔小新 2024-11-26 17:30:42
go
【BZOJ-3144】切糕 最小割-最大流
3144:[Hnoi2013]切糕TimeLimit:10SecMemoryLimit:128MBSubmit:1261Solved:700[Submit][St ...
[详细]
蜡笔小新 2024-11-26 17:02:49
go
luoguP1903 数颜色(通过一道题认识带修改莫队)
题目描述墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会像你发布如下指令ÿ ...
[详细]
蜡笔小新 2024-11-26 16:29:13
callback
PHP中的回调函数与闭包详解
本文详细介绍了PHP中的回调函数及其多种实现方式,包括函数字符串、匿名函数、类静态方法和类方法。同时,探讨了闭包的概念及其在PHP中的应用,通过实例展示了如何利用闭包访问外部变量。 ...
[详细]
蜡笔小新 2024-11-26 18:43:55
沉沉浮浮触涙水
这个家伙很懒,什么也没留下!
Tags | 热门标签
usb
cSharp
httprequest
case
utf-8
controller
header
web3
bit
stream
merge
heap
php
flutter
netty
audio
string
frameworks
dll
jar
schema
web
timestamp
list
testing
config
tree
callback
go
nodejs
RankList | 热门文章
1
Java Web开发中的JSP:三大指令、九大隐式对象与动作标签详解
2
如何在压缩的.gz文件中高效查找特定字符串? - Efficiently searching for specific strings within compressed .gz files
3
传奇手游智能辅助脚本:自动打怪高效升级
4
Java前后端技术资源全面整合与梳理
5
深入解析Spring Boot启动过程中Netty异步架构的工作原理与应用
6
字节跳动深圳研发中心安全业务团队正在火热招募人才!
7
LoadRunner 12.02 中实现服务器资源监控与 IP 欺骗配置方法
8
使用Charles代理工具破解HTTPS请求的详细方法与技巧
9
Python编程入门:3.11.1 版本中的Collatz序列解析与实践
10
射频领域博士学位:信号处理算法在射频技术中的职业前景如何?
11
飰字释义:新华字典中的读音、笔画、常用组词及命名应用解析
12
赛博朋克2077频繁崩溃如何解决?专业技巧助你畅玩游戏
13
大型电机控制系统中电机与驱动器的选择策略分析
14
Android - Google Play 应用复制保护与许可功能:是否支持后续添加?
15
Visual Studio 2015 是否支持内置控制台功能?
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有