C++Primer Plus第十二章程序清单12.1~12.3一个失败的例子01

您希望下个月的早餐、午餐和晚餐吃些什么?在第三天的晚餐喝多少盎司的牛奶?在第 15 天的早餐中需要在谷类食品添加多少葡萄干?如果您与大多数人一样,就会等到进餐时再做决定。C++在分配内存时采取的部分策略与此相同,让程序在运行时决定内存分配,而不是在编译时决定。这样,可根据程序的要,而不是根据一系列严格的存储类型规则来使用内存。C++使用new和delete 运算符来动态控制内存。遗憾的是,在类中使用这些运算符将导致许多新的编程问题。在这种情况下,析构函数将是必不可少的而不再是可有可无的。有时候,还必须重载赋值运算符,以保证程序正常运行。下面来看一看这些问题。

我们看一个失败的例子

程序清单 12.3是从处于开发阶段的 程序中摘录出来的,

演示了 StringBad 的构造函数和析构函数何时运行及如何运行。
该程序将对象声明放在一个内部代码块中,因为析构函数将在定
义对象的代码块执行完毕时调用。如果不这样做,析构函数将在
main0)函数执行完毕时调用,导致您无法在执行窗口关闭前看到
析构函数显示的消息。请务必将程序清单12.2和程序清单12.3 一起编译。

头文件

//strngbad.h -- flawed string class definition
#include<iostream>
#ifndef STRNGBAD_H_
#define STRNGBAD_H_
class StringBad
{
   

private:
	char* str;					//pointer to string 
	int len;					//length of string 
	static int num_strings;		//number of objects
public:
	StringBad();				//default constructor
	StringBad(const char* s);	//constructor
	~StringBad();				//destructor
	//friend function
	friend std::ostream& operator<<(std::ostream& os, const StringBad& st);
};


#endif // !STRNGBAD_H_


//strngbad.cpp 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值