请教一个vector的push_back问题
来源:互联网 发布:域名交易平台有哪些 编辑:程序博客网 时间:2024/06/09 15:37
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
static long g_g = 0, g_x = 0;
typedef struct tagMy
{
int i;
char sz[32];
tagMy()
{
cout << " 构造 " << g_g++ << endl;
memset(this, sizeof(tagMy), 0);
}
~tagMy()
{
cout << " 析构 " << g_x++ << endl;
}
}MY, *PMY;
typedef vector<MY> vecMy;
typedef vecMy::iterator iterMy;
typedef vector<PMY> vecPMy;
typedef vecPMy::iterator iterPMy;
vecMy _vecMy;
vecPMy _vecPMy;
PMY A()
{
MY *pMy = new MY();
if (pMy)
{
pMy->i=1;
strcpy_s(pMy->sz, sizeof(char)*32, "Hello");
} // end if
return pMy;
}
void B(int nTimes)
{
PMY pMy = A();
if ( pMy )
{
// 此处,将根据_vecMy size的大小调用size次析构函数
cout << " _vecMy size " << _vecMy.size() << endl;
_vecMy.push_back(*pMy);
cout << " delete 调用析构函数" << endl;
delete pMy;
pMy = NULL;
} // end if
cout << " ------------------- 第" << nTimes + 1 << "次" << endl ;
}
void C(int nTimes)
{
PMY pMy = A();
if ( pMy )
{
// 此处,将不会根据_vecMy size的大小调用析构函数
cout << " _vecMy size " << _vecMy.size() << endl;
_vecPMy.push_back(pMy);
} // end if
cout << " ------------------- 第" << nTimes + 1 << "次" << endl ;
}
int _tmain(int argc, _TCHAR* argv[])
{
cout << " B 函数 " << endl;
for ( int i = 0; i < 10; i++ )
B(i);
cout << " C 函数 " << endl;
for ( int i = 0; i < 10; i++ )
C(i);
iterPMy iter = _vecPMy.begin();
for ( ; iter != _vecPMy.end(); iter++ )
{
delete *iter;
*iter = NULL;
} // end for
system("pause");
return 0;
}
#include <iostream>
#include <vector>
using namespace std;
static long g_g = 0, g_x = 0;
typedef struct tagMy
{
int i;
char sz[32];
tagMy()
{
cout << " 构造 " << g_g++ << endl;
memset(this, sizeof(tagMy), 0);
}
~tagMy()
{
cout << " 析构 " << g_x++ << endl;
}
}MY, *PMY;
typedef vector<MY> vecMy;
typedef vecMy::iterator iterMy;
typedef vector<PMY> vecPMy;
typedef vecPMy::iterator iterPMy;
vecMy _vecMy;
vecPMy _vecPMy;
PMY A()
{
MY *pMy = new MY();
if (pMy)
{
pMy->i=1;
strcpy_s(pMy->sz, sizeof(char)*32, "Hello");
} // end if
return pMy;
}
void B(int nTimes)
{
PMY pMy = A();
if ( pMy )
{
// 此处,将根据_vecMy size的大小调用size次析构函数
cout << " _vecMy size " << _vecMy.size() << endl;
_vecMy.push_back(*pMy);
cout << " delete 调用析构函数" << endl;
delete pMy;
pMy = NULL;
} // end if
cout << " ------------------- 第" << nTimes + 1 << "次" << endl ;
}
void C(int nTimes)
{
PMY pMy = A();
if ( pMy )
{
// 此处,将不会根据_vecMy size的大小调用析构函数
cout << " _vecMy size " << _vecMy.size() << endl;
_vecPMy.push_back(pMy);
} // end if
cout << " ------------------- 第" << nTimes + 1 << "次" << endl ;
}
int _tmain(int argc, _TCHAR* argv[])
{
cout << " B 函数 " << endl;
for ( int i = 0; i < 10; i++ )
B(i);
cout << " C 函数 " << endl;
for ( int i = 0; i < 10; i++ )
C(i);
iterPMy iter = _vecPMy.begin();
for ( ; iter != _vecPMy.end(); iter++ )
{
delete *iter;
*iter = NULL;
} // end for
system("pause");
return 0;
}
为什么在 _vecMy.push_back(*pMy); 的时候会调用~tagMy()析构函数呢?而且根据_vecMy.size的大小调用相应的次数, 而运行 _vecPMy.push_back(pMy);时,又不会调用析构函数呢?
- 请教一个vector的push_back问题
- vector 的 push_back[转]
- vector的push_back
- C++ vector的push_back
- vector的push_back
- c++ <vector> push_back初始化问题
- 问题: 将N个元素使用push_back插入到vector中, 求push_back操作的复杂度。
- c++的赋值构造函数以及vector::push_back的问题
- 续:vector的push_back和复制构造函数问题
- vector中push_back的复杂度
- 请教!~请教一个问题!~~~~~~~
- vector push_back
- vector::push_back
- push_back的问题
- 请教一个ASP的问题!
- 请教vs2005的一个问题
- 请教vs2005的一个问题
- 请教vs2005的一个问题
- 现代软件工程讲义 2 工程师的能力评估和发展
- 用Javascript获取页面元素的位置
- Updated JDOM with JXL
- android Unable to resolve target 'android-XX'
- asp.net中实现文件下载功能
- 请教一个vector的push_back问题
- 公司聚会喜欢程度计算 算法(动态规划)Dynamic Programming
- 总结:在ScrollView中嵌套ListView
- 查询优化器内核剖析第六篇:谈谈Join的顺序问题,纠正江湖偏方
- Android动画分析之3D翻转效果
- 查询优化器内核剖析第七篇:执行引擎之数据访问操作---Scan
- log4j中log.isDebugEnabled(), log.isInfoEnabled()和log.isTraceEnabled()作用
- Android中的“再按一次返回键退出程序”实现
- Android学习笔记(五四):通知Notification(上)