C++杂记2

来源:互联网 发布:sybase删除表字段sql 编辑:程序博客网 时间:2024/06/07 18:36

1,C++智能指针:shared_ptr:这是是一个标准的共享所有权的智能指针,允许多个指针指向同一个对象,定义在memory中,命名空间std;

1)shared_ptr:对象除了包括一个所拥有对象的指针外,还必须包括一个引用计数代理对象的指针,

2)时间上的开销主要在初始化和考培操作上,*和->操作符重载的开销和auto_ptr一样(后续学习这个)

3)开销并不是我们不适用shared_ptr的理由,永远不要进行不成熟的优化,知道性能分析器告诉你这一点。

4)当程序不知自己需要使用多少个对象时,,使用shared_ptr为了让多个对象共享相同的底层数据。程序不知道需要对象的类型;程序需要在多个对象间共享数据。
5)自定义释放函数,能完成对shared_ptr中保存的指针进行释放操作,还能处理shared_ptr的内部对象未完成的部分工作;
6)使用shared_ptr的注意事项:1)作为被保护的对象的成员是,小心因循环引用造成的无法释放资源
7)shared_ptr:不支持数组,如果使用数组,需要自定义删除器,

 std::shared_ptr<int> sps(new int[10], [](int *p){delete[] p;});

    对于数组元素的访问, 需使要使用 get 方法取得内部元素的地址后, 再加上偏移量取得.

8)std::shared_ptr:使用g++命令行编译的时候:g++ -std=c++11 -o main main.cpp
     使用qmake编译时:CONFIG +=c++11  

9)   vld.lib内存泄漏函数:用来检查内存泄漏的工具的:http://blog.csdn.net/alex_my/article/details/11488805(这有较好的解释)
10,二维指针的申请和释放
int **sig= new int*[2];
data_len = 753589 - 734576;
for (int i = 0; i < 2; i++) {
sig[i] = new int[data_len];
}


for (int i = 0; i < 2; i++) {
delete[] sig[i];
}
delete[] sig;

11,memmove:原型是:void *memmove(void *dest,const void *src,size_t count):对应的头文件是:<string,h>;功能:与src所指的区域赋值count字节到dest所指定的区域中,当 目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,但复制后的src内容会被更改,但是当目标区域和源区域没有重叠则与memcpy函数功能相同。
12,将win32的程序转变为x64的程序:操作方式是:点击项目文件,点击属性,在配置管理器中:选择要更改的项目,在项目下选择需要的平台,没有就创建,例如:新建x64,下面有创建新的解决方案平台,这里根据需要进行选择,需要的话就选择,不需要就不选。


0 0
原创粉丝点击