07 2012 档案
何时调用复制构造函数
摘要:1、按值传递对象2、函数返回对象3、复制初始化,即用一个对象初始化另一个对象#include <iostream>using namespace std;class A{public: A() { cout << "constructor" << endl; } A(const A& a) { cout << "copy constructor" << endl; } ~A() { cout << "destructor" << endl; }
阅读全文
new/delete与malloc/free
摘要:malloc/free带的来问题很简单:它们对构造函数和析构函数一无所知。——〈Effective C++〉new/delete会与构造函数和析构函数有适当的互动,这样可以保证动态创建对象和释放对象的正确性。不要将malloc/free和new/delete混用,必须一一对应。使用了malloc的必须使用free来释放,而使用new的必须使用delete来释放,否则会出现不可预料的问题,其结果是所谓的“未定义”:在开发和测试阶段都没问题,但会在你最重要的客户面前爆发。
阅读全文
虚析构函数与纯虚析构函数
摘要:http://hi.baidu.com/littlefishaa/item/de833119c5400c4a6926bb86这是一篇介绍虚析构函数的文章,写得挺好。析构函数是在销毁对象的时候用来做清理现场的工作的,一般的类的析构函数会在对象销毁时自动调用。在面向对象程序设计中,经常会出现用基类对象实例化得到子类对象的情况,此时在销毁对象的时候可能会出现问题,如果基类的析构函数不是虚函数,则系统只会调用基类的析构函数而不会调用相应子类的析构函数。显式声明基类的虚析构函数可以使所有子类的析构函数也变成虚函数,保证系统在销毁对象时先调用子类的析构函数,再逐层向上调用基类的析构函数。http://ba
阅读全文
原型模式(prototype)
摘要:原型模式用实例指定创建对象的种类,并且通过拷备原型创建新的对象。其实就是从一个已经实例化的对象创建另外一个一样的对象,同时向客户隐藏创建新对象的细节,新创建的对象是可订制的。浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。深复制:被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。一般复制对象根据情况不同可以分为浅复制与深复制,C
阅读全文
浙公网安备 33010602011771号