600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > effective C++ 条款 5:了解c++默认编写并调用那些函数

effective C++ 条款 5:了解c++默认编写并调用那些函数

时间:2020-08-26 03:00:24

相关推荐

effective C++ 条款 5:了解c++默认编写并调用那些函数

编译给会为一个空类声明一个default构造函数、一个copy构造函数、一个copy assignment操作符、和一个析构函数。所有这些都是public且inline:

class Empty{};

就像是写了这样的代码:

class Empty{

Empty(){…}

Empty(const Empty& rhs) {…}

~Empty(){…}

Empty& operator=(const Empty& rhs){…}

};

唯有当这些函数被需要,它们才会被编译器创建出来。

default构造函数和析构函数,主要做些调用base classes和non-static成员变量的构造函数和析构函数。编译器产出的析构函数是个non-virtual,除非这个class的base class自身声明有virtual 析构函数(virtual属性来自base class)。copy构造函数是以被拷贝的对象的成员变量为初值,构造自己的成员变量, 对于内置类型则是拷贝每一个bits来完成初始化。copy assignment操作符执行基本上和copy构造一样。

class NameObject{

public:

NameObject(std::string& name, const int& value);

private:

std::string& nameValue;

const int objectValue;

};

inline void test05()

{

std::string newDog("Persephone");

std::string oleDog("Satch");

NameObject p(newDog, 2);

NameObject s(oleDog, 36);

// p = s; //error C2582: 'NameObject' : 'operator =' function is unavailable

}

c++不允许让reference改指向不同对象,而且不能更改const对象。所以编译器生成的copy assignment操作符无能为力, 如果想赋值只能自己定义copy assignment操作符了。

如果base classes将copy assignment操作符声明为private, 编译器将拒绝为其derived classes生成一个copy assignment操作符。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。