uninitialized_copy()效果试验

根据《STL源码剖析》这段节选描述,实现如下代码进行测试
#include "2jjalloca.h"
#include <vector>
#include <iostream>
#include <memory> class INT {
public:
INT(int i) :
m_int(i) {
cout << "INT()" << endl;
}
INT(const INT& o) :
m_int(o.m_int) {
cout << "Copy INT()" << endl;
}
int value() const {
return m_int;
}
private:
int m_int;
}; ostream& operator<<(ostream& o, const INT& i) {
o << i.value();
return o;
} int main(int argc, char **argv) { vector<INT, JJ::allocator<INT>> a = vector<INT, JJ::allocator<INT>>(,
INT());
// INT* p = new char[sizeof(INT) * 2];
cout << endl;
void* p = ::operator new(sizeof(INT) * );
uninitialized_copy(a.begin(), a.begin() + , (INT*) p);
INT* p1 = (INT*) p;
cout << p1[] << ' ' << p1[] << ' ' << p1[] << ' ';
cout << endl;
}
INT()
_allocate
_construct
Copy INT()
_construct
Copy INT()
_construct
Copy INT()
_construct
Copy INT() Copy INT()
Copy INT()
1 1 0
_destroy
_destroy
_destroy
_destroy
_deallocate
经过测试,的确有拷贝构造。
修改下
int main(int argc, char **argv) {
vector<INT, JJ::allocator<INT>> a = vector<INT, JJ::allocator<INT>>(,
INT());
// INT* p = new char[sizeof(INT) * 2];
cout << endl;
// void* p = ::operator new(sizeof(INT) * 2);
uninitialized_copy(a.begin(), a.begin() + , a.begin() + );
// INT* p1 = (INT*) p;
// cout << a[1] << ' ' << a[1] ;
cout << endl;
}
INT()
_allocate
_construct
Copy INT()
_construct
Copy INT()
_construct
Copy INT()
_construct
Copy INT() Copy INT()
Copy INT() _destroy
_destroy
_destroy
_destroy
_deallocate
这点不符合STL描述,依旧调用了copy constructor
uninitialized_copy()效果试验的更多相关文章
- 关于Mongodb的全面总结
MongoDB的内部构造<MongoDB The Definitive Guide> MongoDB的官方文档基本是how to do的介绍,而关于how it worked却少之又少,本 ...
- IOS 关于扬声器和听话筒的设置 ----自己试验过的,可以达到扩音器和听筒播放的效果
今下午项目中使用到了 扬声器和听筒的设置,我项目中是这样的,有一个聊天设置,聊天设置有一个使用扬声器 播放声音的设置. 这个设置是,当你打开那个开关的话,你在聊天中都可以根据你的使用来任意的播放声音, ...
- [转]Android试验:如果View的ID相同会出现什么效果?
1.实验:通过布局编辑器强行指定两个button id相同,然后在代码中通过findViewById()获得句柄后修改其文本. 实验结果:只有一个button的文本变化了,另一个不受影响. 2.实 ...
- 【特别推荐】小伙伴们惊呆了!8个超炫的 Web 效果
CodePen 是一个在线的 HTML.CSS 和 JavaScript 代码编辑器,能够编写代码并即时预览效果.你在上面可以在线展示自己的作品,也可以看到其他人在网页中实现的各种令人惊奇的效果. 今 ...
- 利用CSS3D效果制作简易旋转木马效果
最近看一下css3d的一些特性,想着也实验学习一下,制作个小demo之类的.就练习了一下.开发一个粗糙的选择木马效果,如图 其实就是找到角度和位置,计算每根柱子的旋转角度摆放到3d空间的置顶位置即可. ...
- 惊艳!9个不可思议的 HTML5 Canvas 应用试验
HTML5 <canvas> 元素给网页中的视觉展示带来了革命性的变化.Canvas 能够实现各种让人惊叹的视觉效果和高效的动画,在这以前是需要 Flash 支持或者 JavaScript ...
- WPF 大数据加载过程中的等待效果——圆圈转动
大家肯定遇到过或将要遇到加载大数据的时候,如果出现长时间的空白等待,一般人的概念会是:难道卡死了? 作为一个懂技术的挨踢技术,即使你明知道数据量太大正在加载,但是假如看不到任何动静,自己觉得还是一种很 ...
- 20个漂亮 CSS3 按钮效果及优秀的制作教程
在这篇文章中,我们编译了一组有用的 CSS3 动画按钮教程和引人注目的实验.正如我们都知道的,CSS3在网页设计方面是最重要和最关键的,可以使您的网站对访客更具吸引力和互动性.你可以学习这些教程和试验 ...
- 未来的 Web:九个不可思议的 WebGL 应用试验
WebGL 技术允许把 JavaScript 和 OpenGL ES 2.0 结合在一起,通过增加 OpenGL ES 2.0 的一个 JavaScript 绑定,WebGL 可以为 HTML5 Ca ...
随机推荐
- C# 利用位运算传递多个参数方法
前言 在工作中用sendMessage的方法向另外一个进程中传递窗体的位置,长度,宽度四个值,但是sendMessage的方法签名中只有两个参数.于是在网上找到了一些代码,找到了这个利用位运算来合并参 ...
- appium+python搭建自动化测试框架_TestAPP框架(三)
Pycharm 创建 Project,搭建 APPTEST框架如下图: 1.框架功能 业务功能的封装 测试用例封装 测试包管理 截图处理 断言处理 日志获取 测试报告生成 数据驱动 数据配置 2. ...
- 2019-1-17 前言 C#高级编程(第11版)
C#已更新为更快的速度.主要版本7.0是2017年3月发布,次要版本7.1和7.2很快发布在2017年8月和2017年12月.通过项目设置,您可以与每个应用程序一起分发,是开源的,不可用仅适用于Win ...
- 报错TypeError: $(...).live is not a function解决方法
报错的原因是这个方法在jquery1.7以后就被废除了, 1.7以后的版本改用.on()方法 之前的用法: .live(events, function) 新方法: .on(eventType, se ...
- AngularJS学习之旅—AngularJS 事件(十四)
1.AngularJS 事件 ng-click ( 适用标签 :所有,触发事件:单击): ng-dblclick( 适用标签 :所有,触发事件:双击): ng-blur(适用标签 : a,input, ...
- RIPng(第三组)
一.实验拓扑 2.地址规划 3.实验配置 1)配置各个路由器的端口地址,PC端地址采用自动配置 如本处的PC0,自动获取IPV6地址 2)配置RIP a.现在路由器开启RIP:ipv6 router ...
- DEDECMS 漏洞修复方案
目录 DEDECMS支付模块注入漏洞 漏洞文件: /include/payment/alipay.php 漏洞描述: 对输入参数$_GET['out_trade_no']未进行严格过滤 修复方案: 对 ...
- RabbitMQ框架构建系列(二)——RabbitMQ基础知识介绍
上一篇记录了一下AMQP协议,RabbitMQ是一个Erlang开发的AMQP协议的开源实现.这一篇简单的介绍一下RabbitMQ的基本原理. 一.RabbitMQ的特点 1.可靠性:RabbitMQ ...
- c++11の顺序容器
容器是一种容纳特定类型对象的集合.C++的容器可以分为两类:顺序容器和关联容器.顺序容器的元素排列和元素值大小无关,而是由元素添加到容器中的次序决定的.标准库定义了三种顺序容器的类型:vector ...
- git 本地代码冲突解决,强制更新
git reset soft,hard,mixed之区别深解 git reset --hard 强制更新覆盖本地 GIT reset命令,似乎让人很迷惑,以至于误解,误用.但是事实上不应该如此难 ...