Bitwise Copy Semantics

Bitwise Copy Semantics (位逐次拷贝)

#include "Word.h"
Word noun("book");
void foo()
{
    Word verb = noun;
    ...    
}

如果Word没有定义explicit copy constructor,那么是否会有一个编译器合成的实例被调用?这的看该Word是否展现“bitwise copy semantics”而定。

// 以下声明展现了bitwise copy semantics
class Word {
public:
    Word(const char*);
    ~Word(){ delete [] str;}
    //...
private:
    int cnt;
    char* str;
}

这种情况下并不需要合成出一个default copy constructor,因为上述声明展现了“default copy semantics”,而verb的初始化操作也就不需要以一个函数调用收场。但是local object verb和global object noun都指向相同的字符串。在退出foo()之前,local object verb会执行destructor,于是字符串被删除,global object noun从此指向一堆无意义之物。member str的问题只能够靠“由class设计者实现出一个explicit copy constructor 以改写default memberwise initialization”或靠“不允许完全拷贝”来解决。

// 以下声明并未展现bitwise copy semantics
class Word {
public:
    Word(const String&);
    ~Word();
    //...
private:
    int cnt;
    String str; //string 声明了一个explicit copy constructor :Str
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值