Intelligence without ambition is a bird without wings.

2016-05-04
C++-智能指针

std::unique_ptr

  • 独占对象所有权

释放时机

  • 当赋值操作时

  • 当离开作用域时

  • 显式调用reset

阅读此文

2016-05-02
mysql-NULL

要点

  • 只能通过IS NULL, IS NOT NULL(运算符), ISNULL()(函数)这3个来进行测试NULL

  • NULL进行任何运算(比较,算术等),结果都为NULL,除非该运算符特别说明!

参考

  1. https://dev.mysql.com/doc/refman/5.0/en/working-with-null.html
  2. https://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_is-null
阅读此文

2016-04-28
设计模式-单例模式

优点

  • 相比全局变量

    • 将构造函数私有,可以防止定义多个实例!

    • 可以实现为uncopyable,禁止复制或赋值!

  • 更加的OO,使用起来便利,无须手动创建和释放!

    • 利用C++的确定性析构特点,可以确保程序退出时,执行析构函数,释放相应资源!
  • 可以确保在使用该对象时,该对象已被初始化,而nonlocal-static却不能保证(参考 Effective C++ Item-4 P30)

    因为C++标准没有定义,也无法定义不同模块中nonlocal-static对象的初始化顺序

  • 程序启动更快,只有在首次使用的时候才会创建

阅读此文

2016-04-28
C++-内存区域

数据段

BSS段通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。特点是可读写的,在程序执行之前BSS段会自动清0。
可执行程序包括BSS段、数据段、代码段(也称文本段)。
BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。特点是:可读写的,在程序执行之前BSS段会自动清0。所以,未初始的全局变量在程序执行之前已经成0了。
数据段包括初始化的数据和未初始化的数据(BSS)两部分[1] 。BSS段存放的是未初始化的全局变量和静态变量。
UNIX下可使用size命令查看可执行文件的段大小信息。如size a.out。

阅读此文

2016-04-28
C++-静态数据成员

1
2
3
4
5
6
7
8
class X
{
public:
int normalValue = 5;
static const int i = 0; // declaration, with initializer
};

const int X::i; // definition

要点

  • 与全局变量存储在同一区域(全局/静态存储区,又叫做数据段)

  • 在函数内用static修饰的变量,也是在全局/静态存储,只是访问的作用域被编译器限定

  • static数据成员只是加上了类名字限定了的全局变量!

为什么需要在类实现文件中单独定义static类型数据成员?

  • 因为类定义在头文件中,而头文件可以在不同的object中引用,
    这样该定义不唯一,链接器在链接时,会报重定义错误!

参考

  1. http://stackoverflow.com/questions/11300652/static-data-member-initialization
  2. http://programmers.stackexchange.com/questions/145299/why-the-static-data-members-have-to-be-defined-outside-the-class-separately-in-c
  3. http://en.cppreference.com/w/cpp/language/static
阅读此文

2016-04-26
daemon

步骤

  1. fork,退出父进程

    确保后面setsid可以执行成功

  2. setsid

    创建新的会话(session),要求该进程不是进程组长(process group leader)。

    当创建了新的会话,便脱离了原有的控制终端(tty)

  3. 再次fork,退出父进程

    可以防止潜在要求打开控制终端,因为控制终端必须要进程组长才可以打开

  4. chdir, 修改当前工作目录

    不影响umount

  5. umask, 设置默认的文件屏蔽字

  6. 关闭打开的文件描述符(0,1,2等,可通过ls /proc/pid/fd查看打开的文件描述符)

    若不关闭,虽然没有了控制终端,不会接受到相应控制信号,则仍能IO对应文件,如标准输出到启动时的终端,从终端读入!

    • 需要注意,默认为行缓冲!
阅读此文

2016-04-25
net

use(samba)

  • 查看帮助

    net help use
    
  • 建立连接

    net use * /user:username \\computername\sharename password
    net use * /user:pm \\192.168.1.2\pm pm0422
    
  • 映射连接

    net use * /user:pm \\192.168.1.2\pm pm0422
    
  • 删除连接

    net use \\computername\sharename /delete
    

参考

  1. https://technet.microsoft.com/en-us/library/bb490717.aspx
阅读此文

2016-04-22
suse

  • 添加软件源

    zypper ar -f <URL> <alias>
    zypper ar -f http://ftp5.gwdg.de/pub/opensuse/discontinued/distribution/11.2/repo/oss/ rep
    
  • 关闭防火墙

    /sbin/rcSuSEfirewall2 stop
    
阅读此文

2016-04-22
mysql-开发经验

  • 程序中,SQL语句尽量用’`’括起来,避免关键字冲突
阅读此文

2016-04-22
windows-md5

certutil -hashfile SLES-11-SP2-DVD-x86_64-GM-DVD1.iso MD5

参考

  1. http://superuser.com/questions/245775/is-there-a-built-in-checksum-utility-on-windows-7
阅读此文