STL以及内存以及类的默认函数-题目
来源:互联网 发布:手机视频剪辑软件中文 编辑:程序博客网 时间:2024/06/16 02:53
String::String( void ){m_str_data = new char[1];m_str_data[0] = '\0';}String::String( const char* str ){if ( str == NULL ){m_str_data = new char[1];m_str_data[0] = '\0';}else{int nc_len = strlen( str );m_str_data = new char[ nc_len + 1 ];memcpy( m_str_data , str , nc_len * sizeof( char ) );m_str_data[nc_len] = '\0';}}String::String( const String& obj ){int nc_len = strlen( obj.m_str_data );m_str_data = new char[ nc_len + 1 ];memcpy( m_str_data , obj.m_str_data , nc_len * sizeof( char ) );m_str_data[nc_len] = '\0';}String::~String( void ){if ( m_str_data ){delete[] m_str_data;m_str_data = NULL;}}String& String::operator =( const String& obj ){if ( this == &obj ){return *this;}if ( m_str_data ){delete []m_str_data;m_str_data = NULL;}int nc_len = strlen( obj.m_str_data );m_str_data = new char[ nc_len + 1 ];memcpy( m_str_data , m_str_data , nc_len * sizeof( char ) );m_str_data[nc_len] = '\0';return *this;}
//假定String类已经定义了构造函数和拷贝构造函数等,都按深度复制的规范String strTest = "abc"; //构造函数 使用new运算符 new charvector<String> vec; vec.push_back( strTest ); //push_back参数是引用型,如果是值的话那又会产生一个string的临时对象 //函数内部生成一个对象会调用 拷贝构造函数 new char //stl内部为它管理的对象分配内存使用内存池 调用::operator new(size_t)来产生大块内存 //String对象在vertor的内存池中分配内存 使用plmentnew
如果不是自己定义的String,而是使用stl中的string,则结局又不一样。
string为小字符串使用数组形式的栈内存
union _Bxty
{ // storage for small buffer or pointer to larger one
_Elem _Buf[_BUF_SIZE];
_Elem *_Ptr;
} _Bx;
注意stl中的string使用写时复制
- STL以及内存以及类的默认函数-题目
- 全局变量的赋值以及类的默认构造函数问题
- [C++][STL]容器的capacity、max_size以及内存分配
- [C++][STL]容器的capacity、max_size以及内存分配
- STL的增长机制、以及内存释放机制
- Android应用程序的默认最大内存值以及修改
- 【STL】list的简单剖析以及各种函数的实现
- 【STL】list的简单剖析以及各种函数的实现
- 【STL】verctor的简单剖析以及各种函数的实现
- C++ STL lower_bound upper_bound的用法以及cmp函数
- C++构造函数重载以及默认参数引起的二义性
- STL容器插入类时的构造函数调用以及插入指针时的情况
- 【STL】find函数原理以及使用
- STL标准模板库以及sort函数
- C++ STL栈容器以及 .front()函数
- C++继承 派生类中的内存布局 以及虚函数、虚函数表的一些总结
- c++默认的构造函数或其他函数,以及这个函数的使用或者不使用
- printf函数的内涵以及造成的严重内存问题
- js的内置对象
- opencv检测人脸
- 优秀CIO应注重企业机构整合
- Linux makefile 教程 非常详细,且易懂 .
- hbm2ddl.auto设置为update时不能工作排查方法!
- STL以及内存以及类的默认函数-题目
- js事件
- 浅谈 java 设计模式--工厂方法模式(Factory Method pattern)
- 实现Vim tags自动更新
- ALSA的配置文件
- 2012 BI发展趋势预测
- 在数组中存储对象
- MYSQL常用命令
- autoit3 ie.au3 函数之——ControlClick