C++
光利繁华的背后
每天都要有进步!制定战略,安排计划,实现任务!
展开
-
非正确经验引发C++内存泄露
http://blog.csdn.net/lincyang/article/details/8656456眼见的事实尚有假,背后的言语未必真。---谚语当使用另一种方式去实现相同的任务时,过往的经验可以帮助你更快速的分析和实现。但有时候经验也会产生负面影响。下面的一段例子表示当一个对象以值的形式包含另一个对象时,会自动调用另一个对象的析构函数。[转载 2017-09-05 15:11:00 · 236 阅读 · 0 评论 -
C++ 智能指针详解
C++ 智能指针详解 一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_p转载 2017-09-08 14:40:04 · 294 阅读 · 0 评论 -
scoped_ptr源码
template class scoped_ptr { public: typedef T element_type; explicit scoped_ptr(T* p = NULL) : ptr_(p) {} ~scoped_ptr() { reset(); } T& operator*() const { return *ptr_; } T原创 2017-09-08 15:03:20 · 304 阅读 · 0 评论 -
C++对象模型目录
C++对象模型目录C++ - 对象模型之 编译器何时才会自行添加构造函数C++ - 对象模型之 内存布局C++ - 对象模型之 成员函数调用C++ - 对象模型之 构造和析构函数都干了什么C++ - 对象模型之 类对象在执行时是如何生成的C++ - 对象模型之 模板、异常、RTTI的实现参考:点击打开链接转载 2017-09-08 15:57:01 · 223 阅读 · 0 评论 -
用C++代码描绘UML中的 关联 依赖 组合 聚合 泛化
点击打开链接UML的类图关系分为: 关联、聚合,组合、依赖、泛化(继承)。而其中关联又分为双向关联、单向关联、自身关联;下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里。1、关联双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法。使用ROSE 生成的代码是这样的:class C1 ...{public:转载 2017-09-29 13:09:33 · 726 阅读 · 0 评论 -
C++学习之--QT一些基本知识
关于slots和signals。1、signals前面不可加public、private和protected进行修饰;slots前面可以加,因为Qt说槽函数可以当普通函数使用。2、signals区域的函数必须是void类型,而且这些信号函数没有函数体,也就是说不可以自己定义这些信号函数,你只要声明它就够了,其它不用管,Qt内部自己弄。3、宏定义和函数指针不能用于信号和槽的参数,信号和槽原创 2017-09-29 14:15:59 · 750 阅读 · 0 评论 -
C++文件操作
C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:1、插入器(串"Write Stdout"和换行字符('\n')输出到标准输出流。2、析取器(>>) 从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型原创 2017-10-09 10:31:08 · 291 阅读 · 0 评论 -
拷贝构造函数的调用时机
在C++中,下面三种对象需要调用拷贝构造函数!1. 对象需要通过另外一个对象进行初始化;2. 对象以值传递的方式传入函数参数对象以值传递的方式从函数返回3. 拷贝构造函数的调用有四种场景假设定义了一个类A:class A{public:A(const A& obj) //拷贝构造函数{...}...};第一种copy构造函数调用:vo原创 2017-10-09 13:40:14 · 792 阅读 · 0 评论 -
C++之三五法则
有三个基本操作可以控制类的拷贝操作:拷贝构造函数、拷贝赋值运算符和析构函数。而且,在新标准下,一个类还可以定义一个移动构造函数和一个移动赋值运算符。这些操作通常应该被看作一个整体。通常,只需要其中一个操作,而不需要定义所有操作的情况是很少见的。 需要析构函数的类也需要拷贝和赋值操作 当我们决定一个类是否需要定义它自己版本的拷贝控制成员时,一个基本原则是首先确定这个类是否需要一个析构函数原创 2017-10-09 14:00:59 · 1021 阅读 · 1 评论 -
Boost智能指针学习
智能指针能够使C++的开发简单化,主要是它能够像其它限制性语言(如C#、VB)自动管理内存的释放,而且能够做更多的事情。 1、 什么是智能指针智能指针是一种像指针的C++对象,但它能够在对象不使用的时候自己销毁掉。我们知道在C++中的对象不再使用是很难定义的,因此C++中的资源管理是很复杂的。各种智能指针能够操作不同的情况。当然,智能指针能够在任务结束的时候转载 2017-09-08 10:50:51 · 300 阅读 · 0 评论 -
C++之include<iostream>与include<iostream.h>
一、使用说明#include是标准的C++头文件,任何符合标准的C++开发环境都有这个头文件。在旧的标准C++中,使用#include但在新标准中,用#include,而且在VC中编程的同时要注意要添加:using namespace std;二、C与C++关系看该问题 和是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到转载 2017-09-08 10:16:50 · 1826 阅读 · 0 评论 -
C++函数与java函数对比--对象
Android源码底层的代码实现文件有.h、.c、.cpp后缀名文件,它们分别是c、c++程序代码文件和头文件。下面就以一个极其简单的小例子来对比理解它们之间关系。C++是面向对象,JAVA是一切皆对象! 1. 在java中,假如我要实现一个函数getHeight(int height)返回的是传入的height 1). 在A.java文件中声明和定义函数的实现,原创 2017-09-08 10:15:25 · 393 阅读 · 0 评论 -
C++提高
对于基本的容器(链表,map),基本的算法(二分,排序),能做到自己实现么?oo,继承和多态,虚函数表在哪,内存怎么组织的?模板,模板和宏有什么区别?本质是什么?异常,异常怎么用,什么场合下适合用异常?内存管理,内存池咋实现?多线程,怎么避免死锁?悲观锁和乐观锁?自旋锁,读写锁?mutex,CRITICAL_SECTION,atomic?网络通信,除了mfc封装好的CSoc原创 2017-09-06 16:32:37 · 435 阅读 · 0 评论 -
C++告诫
1、 少用继承;2、原创 2017-09-06 16:33:27 · 227 阅读 · 0 评论 -
C++默认拷贝构造函数调用
以下情况会调用拷贝构造函数1.直接初始化和拷贝初始化时2.将一个对象作为实参传递给一个非引用或非指针类型的形参时3.从一个返回类型为非引用或非指针的函数返回一个对象时4.用花括号列表初始化一个数组的元素或者一个聚合类(很少使用)中的成员时。原创 2017-09-06 17:08:17 · 621 阅读 · 0 评论 -
C++ 中const 使用总结
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、Const作用 如下表所示:No.作用说明参考代码原创 2017-09-14 17:27:10 · 252 阅读 · 0 评论 -
C++虚函数、纯虚函数
1、基本概念虚函数虚函数 是在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。我们想要的是在程序中任意点可以根据所调用的对象类型来选择调用的函数,这种操作被称为动态链接,或后期绑定。纯虚函数您可能想要在基类中定义虚函数,以便在派生类中重新定义该函数更好地适用于对象,但是您在基类中原创 2017-09-14 17:53:00 · 252 阅读 · 0 评论 -
C++中的虚继承
注意:虚基类的构造函数一定是最先调用多继承中被当做基类来虚继承的类是虚基类。虚基类:使用关键字virtual继承的基类。即使同一类在层次中作为虚基类出现多次,派生类对象中虚基类部分也只出现一次。在非虚基类中,构造函数只能初始化自己的直接基类,当对一个类进行虚继承的时候,由最底层的派生类初始化那个类,因此最底层的派生类应包含用于其他所有虚父类的初始化式。在这里有四个类:P转载 2017-09-07 11:06:24 · 378 阅读 · 0 评论 -
C++ 对象创建方式
C++在创建对象的时候可以采用两种方式:(例如类名为Test) Test test 或者 Test* pTest = new Test()。 这两种方法都可以实例化一个对象,但是这两种方法有很大的区别,区别在于对象内容所在的内存空间不同,众所周知,内存的分配方式有三种 (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。转载 2017-09-07 15:59:29 · 416 阅读 · 0 评论 -
C++ explicit关键字详解
explicit只是限制构造函数或者类型转换函数只能以括号的方式调用,对其他函数无影响。企图用隐式转换时,无视所有explicit函数,并调用一个最匹配的函数。C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).转载 2017-09-15 14:33:14 · 222 阅读 · 0 评论 -
二叉树之红黑树
1. 排序二叉树 排序二叉树是一种特殊结构的二叉树,可以非常方便地对树中所有节点进行排序和检索。排序二叉树要么是一棵空二叉树,要么是具有下列性质的二叉树:若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;它的左、右子树也分别为排序二叉树。图 1 显示了一棵排序二叉树:原创 2017-10-09 14:41:14 · 334 阅读 · 0 评论