请说明下列代码的输出,并解释原因。#includeclass A{public: virtual ~A();};A::~A(){ printf("delete A\n");}class B : public A{public: ~B();};B::~B(){ printf("...
分类:
编程语言 时间:
2014-07-18 20:03:10
阅读次数:
281
这是个提醒,算是吧!如果详细原理过程,可能会有一个大篇幅。但这里不想多加赘述,只说说它的破坏力!最近写了个图像处理框架,要做个基类来handle众多子类,写之前一直申称:要注意内存管理,写好析构函数。谁知最后还是偏偏忘记了将基类析构函数virtual化,结果在操控基类释放内存的一段程序中,发现基类释...
分类:
编程语言 时间:
2014-07-18 12:03:57
阅读次数:
261
为了访问公有派生类的特定成员,可以通过讲基类指针显示转换为派生类指针。也可以将基类的非静态成员函数定义为虚函数(在函数前加上virtual) 1 #include 2 using namespace std; 3 4 class base{ 5 public: 6 /*virtual*/ ...
分类:
其他好文 时间:
2014-07-17 18:04:41
阅读次数:
300
一个类,new出来或者create出来,引用计数是1,如果引用计数为0,就会调用析构函数如果delete 这个类的指针,也会调用析构函数。如果一个类A的指针被多个类持有的时候,让A继承自Ref,然后每个类持有A的引用时,retain一下,不需要的时候release一下CC_SAFE_RELEASE_...
分类:
其他好文 时间:
2014-07-16 18:39:23
阅读次数:
233
1. 抛出异常1.1 抛出异常(也称为抛弃异常)即检测是否产生异常,在C++中,其采用throw语句来实现,如果检测到产生异常,则抛出异常。 该语句的格式为: throw 表达式;如果在try语句块的程序段中(包括在其中调用的函数)发现了异常,且抛弃了该异常,则这个异常就可以被try语句块后的某个c...
分类:
编程语言 时间:
2014-07-16 15:20:46
阅读次数:
238
拷贝控制示例
那么接下来尽情欣赏这个案例吧!!!
/**
* 功能:拷贝控制示例
* 时间:2014年7月14日10:57:39
* 作者:cutter_point
*/
#include
#include
#include
#include
using namespace std;
class Folder;
/**
Message类
*/
class Message
{
fr...
分类:
编程语言 时间:
2014-07-14 17:39:36
阅读次数:
293
交换操作
class HasPtr
{
friend void fun2();
friend void swap(HasPtr&, HasPtr&);
public:
// HasPtr()=default;
HasPtr(const string &s=string()):ps(new string(s)), i(0){}
//对ps指向的stri...
分类:
编程语言 时间:
2014-07-14 17:18:06
阅读次数:
314
拷贝控制和资源管理
13.2.1行为像值的类
*定义一个拷贝构造函数,完成string的拷贝,而不是拷贝指针
*定义一个析构函数来释放string
*定义一个拷贝赋值运算符来释放对象当前的string,并从右侧运算对象拷贝string
class HasPtr
{
public:
HasPtr(const string &s=string()):ps(new ...
分类:
编程语言 时间:
2014-07-13 13:42:44
阅读次数:
214
拷贝、赋值与销毁(1)
13.1.1拷贝构造函数
/**************************************
13.1.1拷贝构造函数
**************************************/
class Foo1
{
public:
Foo1(); //默认构造函数
Foo1(const Foo1&); ...
分类:
编程语言 时间:
2014-07-13 00:10:38
阅读次数:
379
经验:绝对不要重新定义继承而来的 non-virtual 函数 --> Item 7 "为多态基类声明 virtual 析构函数" 是本条款的特例
示例:
class B{
public:
void mf();
//...
};
class D: public B{
public:
void mf(); // 遮掩了B::mf,Item 33 名称遮掩规则
}
D x;
B *pB = &x;
D *pD = &x;
pB->mf(); // 调用 B::mf
pD->mf(); // 调用 ...
分类:
编程语言 时间:
2014-07-12 19:09:10
阅读次数:
234