C++primer pe13_15(还有13——4、9、12中NoName类的指针疑惑)

    new Sales_item;
    new Sales_item;
    new Sales_item;
    new Sales_item;//这些必须主动delete//计算析构函数的调用次数,在析构函数中定义了一个打印语句以供判断
#include"head.h"
#include"Sales_item.h"

void fcn(const Sales_item *trans, Sales_item accum){//函数内是三次,item1和item2,还有一个accum的副本
	Sales_item item1(*trans), item2(accum);
	if(!item1.same_isbn(item2)) return;
	if(item1.avg_price() <= 99){
		std::cout << "test(in):" << std::endl;
		 return;
	}
	else if (item2.avg_price() <= 99) return;
	
}
int main(){
	Sales_item item1,item2;
	Sales_item *p = &item1;
	//p = new Sales_item;//对照组:p指向正常的动态分配对象,delete没问题
	fcn(&item1, item2);
	std::cout << "test1:" << std::endl;
	delete p;//先调用一次delete p, 再在结束默认删item1,重复?其实是这里是一个强制用delete删除一个non-dynamic-obj的错误吧
	//不等到最后冲突,在此句执行完就弹错了(因为是内存错误把,当即生效),那些报错声明还是看不太懂,一大堆地址,还有rw-p之类的权限,每个地址的权限?
	std::cout << "test2:" << std::endl;
    new Sales_item;
    new Sales_item;
    new Sales_item;
    new Sales_item;//要注意析构函数的调用条件,这些必须主动delete
 }

小结:析构不能overload,但是编译器始终都能合成一个析构函数并且始终都会运行。这也证实出了overload功能确实只是compiler的一个小功能,overload参数列表不同只是对coder的要求,compiler本身是可以随意去构建重载的。

rule of three:析构函数需要另外两个复制控制,尽管不能通过打印输出之类的验证他们一起运行过(Class a = new Class;也是一样,虽然此复制构造过程用到赋值操作符,但是显示不出来,只显示用过一次copy-constructor)

存疑:13.4  13.9   13.12牵连的Noame类,有个私有成员,是std::string *pstring;关于此指针的初始化,复制,析构等问题

到底什么是所谓的复制指针指向的string对象而非复制指针,是指复制指针内容么(也就是两指针同指向一个对象)?这不叫复制指针?如果是真正意义的复制string对象,那么string对象存在哪?类对象成员中只有一个string指针,没有string对象的位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值