首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
vbscript
js
tree
solr
datetime
main
triggers
runtime
cmd
eval
int
loops
cookie
php8
vba
iostream
version
merge
数组
frameworks
flutter
uri
utf-8
settings
grid
request
random
format
usb
instance
const
text
hash
future
scala
callback
nodejs
client
post
get
expression
include
dagger
dockerfile
case
spring
blob
schema
testing
c语言
httprequest
cpython
list
hashcode
javascript
php
dll
default
rsa
plugins
lua
hook
perl
copy
buffer
yaml
bit
timezone
ascii
bash
python3
erlang
web3
actionscrip
express
web
chat
io
search
当前位置:
开发笔记
>
编程语言
> 正文
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
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
数组
Weight the Tree(树形dp)
题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!----- ...
[详细]
蜡笔小新 2024-12-26 15:55:56
数组
Codeforces Round #566 (Div. 2) A~F个人题解
Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ...
[详细]
蜡笔小新 2024-12-25 18:41:21
format
UNP 第9章:主机名与地址转换
本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ...
[详细]
蜡笔小新 2024-12-27 11:26:39
int
长春大学软件工程:二叉排序树实验报告
本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ...
[详细]
蜡笔小新 2024-12-26 15:32:56
int
VxWorks中的双向链表与环形缓冲应用
本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ...
[详细]
蜡笔小新 2024-12-26 13:26:16
int
USACO 2014 Jan - Moolympics区间记录优化算法
题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ...
[详细]
蜡笔小新 2024-12-27 18:14:31
int
Objective-C 编程中的关键语法点
本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ...
[详细]
蜡笔小新 2024-12-26 19:42:38
int
C语言链表动态创建:头插法与尾插法详解
本文详细介绍了C语言中链表的两种动态创建方法——头插法和尾插法,包括具体的实现代码和运行示例。通过这些内容,读者可以更好地理解和掌握链表的基本操作。 ...
[详细]
蜡笔小新 2024-12-26 13:59:07
merge
MySQL索引详解与优化
本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ...
[详细]
蜡笔小新 2024-12-25 19:52:47
int
使用Objective-C和dispatch库实现并发素数计算
本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ...
[详细]
蜡笔小新 2024-12-28 08:44:35
request
Apache Jena 中 Txn.executeWrite 方法详解与代码示例
本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ...
[详细]
蜡笔小新 2024-12-26 17:55:52
utf-8
2023年京东Android面试真题解析与经验分享
本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ...
[详细]
蜡笔小新 2024-12-26 17:45:48
format
使用 SQLiteJDBC 和 HikariCP 实现 Java 程序连接 SQLite 数据库
本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ...
[详细]
蜡笔小新 2024-12-26 17:34:42
int
文件描述符、文件句柄与打开文件之间的关联解析
本文详细探讨了文件描述符、文件句柄和打开文件之间的关系,通过具体示例解释了它们在操作系统中的作用及其相互影响。 ...
[详细]
蜡笔小新 2024-12-26 14:00:46
random
毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ...
[详细]
蜡笔小新 2024-12-25 17:38:50
沉沉浮浮触涙水
这个家伙很懒,什么也没留下!
Tags | 热门标签
vbscript
js
tree
solr
datetime
main
triggers
runtime
cmd
eval
int
loops
cookie
php8
vba
iostream
version
merge
数组
frameworks
flutter
uri
utf-8
settings
grid
request
random
format
usb
instance
RankList | 热门文章
1
Oracle 使用set修改数据库运行参数
2
Oracle Bitmap Index
3
在Oracle下创建database link两种方法-mysql教程
4
Oracle数据库冷备份的异地恢复
5
Oracle菜鸟的一次Oracle恢复笔记-mysql教程
6
讲解Oracle中的Clob与String类型转换
7
Ubuntu下管理Oracle官方软件sqldeveloper最方便安装
8
Oracle物化视图创建实例-mysql教程
9
Oracle数据库一致性读的原理-mysql教程
10
Oracle 11g解锁scott
11
Oracle客户端与数据库服务器连接-mysql教程
12
解决GBK数据库文件通过source导入MySQL数据库乱码的问题
13
Oracle存储过程的调用-mysql教程
14
建立数据库链接 create database link
15
RedHat AS4 UP7 (64位)安装Oracle 10g单实例-mysql教程
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有