c++中构造函数调用构造函数
来源:互联网 发布:linux nvidia 大黄蜂 编辑:程序博客网 时间:2024/04/30 21:28
c++中构造函数完成的工作分两步:1 分配空间 2 初始化空间
构造函数调用构造函数。
class A {public: A() { A(0) // new(this)A(0) 可用办法,使用pleacement new 在串入的指针this位置构造对象 } A(int a) { _a = a; }private: int _a};
这样会导致,A()中先分配了空间,然后调用A(0)又创建了一个临时对象,然后初始化为0,而原对象则没有初始化。。这种问题在类中有指针需要分配空间时会导致灾难。。
从析构函数的调用次数也可以看出
#include <iostream>using namespace std;class A {public: A(int a) { cout << "A(int )" << endl; } A(){ cout << "A()" << endl; A(10.0); } A(double a) { cout << "A(double )" << endl; A(int(a)); } ~A() { cout << "~A()" << endl; }};int main () { A(); return 0;}/*A()A(double )A(int )~A()~A()~A()*/但是,c++11支持了成员初始化列表调用构造函数
#include <iostream>using namespace std;class A {public: A(int a) { cout << "A(int )" << endl; } A(): A(10.0){ cout << "A()" << endl; } A(double a): A(int(a)) { cout << "A(double )" << endl; } ~A() { cout << "~A()" << endl; }};int main () { A(); return 0;}/*A(int )A(double )A()~A()*/
记录一个编译错误
database.cc:530:90: error: cannot bind ‘std::basic_ostream<char>’ lvalue to ‘std::basic_ostream<char>&&’
首先如果在一个.h文件中定义函数的实现的话(写在类{}内的除外,以为会inline),当这个h被包含多次会报重复定义
需要在.h中声明,在.cpp中定义。
但是对于模版函数就不同了。
模版函数需要按要求展开成很多份,如果像 上面 的方案的话。会报未定义。。要直接定义在.h中。这样在编译时才会展开成多份。而且编译器会帮助处理 重复定义的 错误。
0 0
- C++:构造函数中调用虚函数
- C++:构造函数中调用虚函数
- 在构造函数中调用构造函数
- 在构造函数中调用构造函数
- C++中构造函数调用构造函数
- C++中构造函数调用构造函数
- C++中构造函数调用构造函数
- C++构造函数中调用构造函数
- Java构造函数中调用构造函数
- C++中构造函数调用构造函数
- c++中构造函数调用构造函数
- C++中构造函数调用构造函数
- C++中构造函数调用构造函数
- 构造函数调用构造函数
- 构造函数调用构造函数
- 构造函数调用构造函数
- C++构造函数调用其他构造函数
- c++:在类的构造函数中调用另一个构造函数
- LeetCode 275 H-Index II
- linux下如何添加一个用户并且让用户获得root权限
- 架构搭建篇
- linux java 查找进程中的线程
- 关于用mongodb java api 来实现在$project中使用$substr函数的方法
- c++中构造函数调用构造函数
- Navicat Report Viewer 设置 HTTP 的方法
- oracle官方提到被频繁询问的问题3(缓存融合技术和它的应用)
- android 用户注册或登录时判断输入的是否是正确格式的电话号码
- JAVA—— BufferedReader、BufferedWriter
- acm编程比赛
- 今天开始学习软件测试技术大全第一天
- 你真的会用Context么?
- VS几款有用的插件