- 浏览: 763612 次
- 性别:
- 来自: 深圳
文章列表
//Tag仅仅是用于标记不同的单件,可以是空类,甚至是声明
//第二个参数RequestedSize等同于pool构造函数中的整数requested_size,指示分配内存块的大小
template<typename Tag,unsigned RequestedSize>
class singleton_pool
{
public:
static bool is_from(void * ptr);
static void * malloc();
static void * ordered_malloc();
static void ...
//模板类型参数ElementType指定了要分配的元素类型,该实例不能再用于分配其它类型的对象
template<typename ElementType>
class object_pool:protected pool
{
public:
object_pool();
~object_pool();
//malloc和free并不会调用类的构造函数和析构函数
element_type *malloc();
void free(element_type *p);
bool is_from(element_ ...
template<typename UserAllocator = ... >
class pool
{
public:
//接受一个size_type类型的整数,指示每次分配内存块的大小(不是内存池的大小)
explicit pool(size_type requested_size);
~pool();
//返回requested_size
size_type get_requested_size()const;
//用void*指针返回从内存池中分配的内存块,大小为requested_size,如果分配失 ...
特化就是参数为确定的数据类型
显示特化:
template<>
void fun<const int&>(const int& i)
{
cout << i << endl;
}
#include<iostream>
#include<assert.h>
#include<vector>
using namespace std;
template<class T>
void fun(T *t,int begin,int end,double sum)
{ ...
生成exe图片
1.在项目文件夹里创建名为*.rc的文件,如myapp.rc。
2.文件中写入IDI_ICON1 ICON DISCARDABLE "myapp.ico"
其中,myapp.ico为图标的文件名。
3.将文件myapp.ico拷贝到项目文件夹内。
4.在解决方案资源管理器中,右键点击项目,添加myapp.rc及myapp.ico。
5.重新生成解决方案。
然后成release生成的exe文件夹里加上QtCore4.dll,QtGui4.dll
帮同学写个双色球代码来随便玩玩,以后再想办法把dll也去掉,第一个rar是对应的ui文件,第二个可以直接用,如果 ...
warning:resize event
- 博客分类:
- Qt
Calling resize() or setGeometry() inside resizeEvent() can lead to infinite recursion.
C
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
FILE* f = fopen("a","w");
fwrite("test",1,strlen("test"),f);
fclose(f);
f = fopen("a","r");
char ...
weak_ptr是为配合shared_ptr而引入的一种智能指针来协助shared_ptr工作,它可以从一个shared_ptr或另一个weak_ptr对象构造,它的构造和析构不会引起引用记数的增加或减少。没有重载*和->但可以使用lock获得一个可用的shared_ptr对象
template<class T> class weak_ptr
{
public:
weak_ptr();
template<class Y> weak_ptr(shared_ptr<Y> const & r);
weak_pt ...
shared_ptr早期叫做counted_ptr,它实现了引用计数型的智能指针,与scoped_ptr一样包装了new操作符在堆上分配的动态对象,但可以被自由地拷贝和赋值。同时它弥补了auto_ptr因为转移语义而不能把指针作为STL容器元素的缺陷。
share_ptr是 ...
Bourne shell:贝尔实验室开发,现有的unix系统基本都提供
Bourne-again shell:GNU shell,所有linux系统都提供这种shell,兼容Bourne shell
C shell:Bill Joy在伯克利开发的,所有BSD版本都提供这种shell
Korn shell:是Bourne shell的后继者,由David Korn在贝尔实验室研发
TENEX C shell:C shell的加强版
内核(kernel),它相对较小,控制计算机硬件资源,提供程序运行环境。它是进程的管理者。如:linux是GNU操作系统使用的内核
内核的接口被称为系统调用(system call),shell是一种特殊的应用程序,它为运行其他应用程序提供一个接口
内核提供模块(module),模块是一个目标文件,其代码可以在运行时链接到内核或从内核解除链接。
开发的特点:
不能访问C库,必须使用GNU C
缺乏像用户空间那样的内存保护机制:内核中的内存都不分页
浮点数很难用
只有一个很小的定长堆栈
由于内核支持异步中断,抢占和SMP,因此必须时刻注意同步和并发
要考虑可移植性
scoped_ptr是一个很类似auto_ptr的智能指针,它包装了new操作符在堆上分配的动态对象,能够保证动态创建的对象在任何时候都可以被正确的删除,但很重要的一点是scoped_ptr获取了对象的管理权,就无法再从它那里取回来
它只在对象析构的时候释放一次,对象析构的时候自动释放内存
source code
template<class T>
class scoped_ptr{
private:
T *px;
//private意味着指针不能被转让所有权
scoped_ptr(scoped_ptr const &);
...
为啥想学boost呢,因为它名气大?其实主要还是因为工作中有不要地方用到了不少智能指针,bind等一些东西,想直接完全理解起来还有点难。
boost.smart_ptr库提供了六种智能指针,包括scoped_ptr,scoped_array,shared_ptr,shared_array,weak_ptr和instrusive_ptr,来增强std::auto_ptr,而且是异常安全的。它们都很轻量,速度和原始指针差不多,但是类型T有一个要求:类型T的析构函数不能抛出异常,析构函数最好不要抛出异常不是被很多大牛重申了N次了吗?
原因是:1.能够在异常转递的堆栈辗转开解(stack-unwindi ...
RAII
- 博客分类:
- boost模板元编程
RAII(资源获取即初始化,Resource Acquisition Is Initialization),在使用资源的类的构造函数中申请资源,然后使用,最后在析构函数中翻译资源
打算学习下模板,boost,元编程。相关文章,代码基于C++ Template,C++模板元编程,和国人的Boost程序库完全开发指南,这本书讲的很实在,给它免费打下广告,我乐意,哈哈!