1.strcpy是拷贝直到\n时结束,所以长度上要增加一个字节,例如原来是一个字符的char[s]="s",
到了string中就是"s\n",strcpy是拷贝2个字符,如果拷贝目标地址只有一个字节长度,就会有问题。
2.每个线程一个栈(stack),堆(heap)空间共享,栈空间线程独立,全局变量进程内共享.
另外在windows下如果用dll,那么每个dll有自己的数据段,全局变量在dll内共享.
有些第三方库内部有隐含的全局变量,使用多线程调用这些库的时候要小心.
全局变量指static或者在函数体外面定义.
类没有定义变量,类只是定义数据结构.对象才是变量,成员变量是对象这个变量内嵌的变量
3.一个问题:
pure virtual method called
terminate called without an active exception
Aborted
看是否有对象被delete两次了。
4.建议不要在构造函数里做一些初始化资源之类的事情。构造函数只做不得不做的东西,初始化单独写一个init函数,创建后显式调用。
5.如果函数参数传的是对象的引用,那么这个参数是不需要判断空间是否分配的,这里的空间是肯定会有的。
6.struct和class的区别就在于默认的访问是public还是private,其他都一样
struct S
{
std::string type;
unsigned int len;
unsigned char* body;
public:
~S(){
delete[] body;
body = NULL;
}
};
struct也有继承
7. 返回引用的用法
方法定义:
static A& getInstance();
调用时
A a = getInstance(); 另外创见一个对象a,将getInstance()返回的对象赋值给a
A& a = getInstance(); 创建一个类似指针的A的引用,所指向的对象就是getInstance()。
8.变量初始化
只有静态变量被系统初始化了,例如int类型的静态变量被初始化成0,如果是对象的成员变量,需要自己显式地初始化,否则不知道是个什么数字。
9.管道文件
mkfifo /dev/filename
set_fl(STDOUT_FILENO, O_NONBLOCK); /* set nonblocking */