拒绝编译器默认函数
来源:互联网 发布:统招专升本网络课程 编辑:程序博客网 时间:2024/05/16 12:07
如下定义一个类:
class A{
}; 函数体内不定义任何构造函数,编译器会默认生成拷贝构造函数,不带参数的默认构造函数以及赋值构造函数
赋值构造函数型如:
A& operator=(const A& object);
下面例子完全可以通过编译器:
#include "stdafx.h"
class A{
};
void main()
{
A a; //调用默认构造函数
A b(a); //调用拷贝构造函数
b = a; //调用赋值构造函数
}
example:
// utest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class A{
public:
A(int val):value(val)
{
//value = val;
}
void display()
{
cout<<"value:"<<value<<endl;
}
private:
int value;
};
void main()
{
A a(2);
A b(a);
a.display();
b.display();
b = a;
b.display();
}
结果:
value:2
value:2
value:2
请按任意键继续. . .
屏蔽掉编译器自动生成函数的两种方法:
1. 将拷贝构造函数或者赋值构造函数申明为私有方法,并不要定义
2. 利用类的继承实现
1.
// utest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class A{
public:
A(int val):value(val)
{
//value = val;
}
void display()
{
cout<<"value:"<<value<<endl;
}
private:
int value;
A(const A&); //声明私有拷贝构造函数
A& operator=(const A&); //申明私有赋值构造函数
};
void main()
{
A a(2);
A b(a); //编译出错
a.display();
b.display();
b= a; //编译出错
b.display();
}
2.
// utest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class base{
protected:
base(){}
~base(){}
private:
base(const base&);
base& operator=(const base&);
};
class A:public base{
public:
A(int val):value(val)
{
//value = val;
}
void display()
{
cout<<"value:"<<value<<endl;
}
private:
int value;
};
void main()
{
A a(2);
A b(a);
a.display();
b.display();
b= a;
b.display();
}
- 拒绝编译器默认函数
- 若不想使用编译器默认生成的函数,就该拒绝(Effective C++_6)
- 拒绝编译器自动生成的函数
- 编译器与默认构造函数
- 编译器默认生成的函数
- C++箴言:拒绝不想用的编译器产生的函数
- 不需要编译器自己生成的函数,就应该明确拒绝
- Effective C++(6) 如何拒绝编译器的自动生成函数
- Effective C++之 拒绝编译器自动生成函数
- 条款6 不想编译器自动生成函数,就明确拒绝
- C++编译器默认声明的成员函数
- 编译器为类构建那些默认函数?
- 编译器何时调用默认构造函数
- C++编译器默认声明的成员函数
- C++编译器生成的默认函数
- c++编译器什么时候生成默认构造函数
- C++编译器生成的默认函数
- C++编译器生成的默认函数
- 浅谈组合模式
- 【转】跟我学MySQL存储过程
- SAX 解析到文件,缓存到内存
- arm-linux内核配置文件Kconfig语法
- MySQL触发器、存储过程、自…
- 拒绝编译器默认函数
- 计算机类论文综述的写法(转…
- 阿里云服务器【ubuntu】安装jdk
- 百度——主题模型
- oj-2-继承(改错)
- GRID拖拽行的例子
- 零基础小白使用LDA模型
- UML建模之类图(Class Diagram,UML图)
- [转]文本分类算法的效果