C++
tsh123321
这个作者很懒,什么都没留下…
展开
-
C++成员函数和成员变量存储说明
成员函数和成员变量存储说明C++中类的成员函数和成员变量的存储方式是不一样的。比如定义对象是系统会为对象分配存储空间,其中只为成员变量分配了存储空间,而成员函数则存放在公共的代码段中。如下图所示:因此可以看出,每个对象占用的存储空间只是该对象的数据部分(虚函数指针和虚基类指针也属于数据部分)所占用的存储空间,而不包括成员函数所占用的存储。测试代码代码如下,以下代码的输出结果是什么?cl...原创 2019-04-02 11:11:50 · 1367 阅读 · 0 评论 -
C++全局变量内存分配和初始化顺序
C++全局变量内存分配和初始化顺序1.局部变量规则局部变量是在栈空间上,内存分配的顺序和代码的顺序是一致的2.全局变量规则2.1 初始化的全局变量一般来说,对于初始化的全局变量,编译器遇到之后知道这是一个定义,会马上分配空间,例如:int ib = 10;int ia = 10;这个分配的结果是:ia的地址在ib后面2.2 未初始化的全局变量对于未初始化的全局变量,编译器遇到之...原创 2019-04-02 11:13:50 · 1379 阅读 · 0 评论 -
C++智能指针对比
对比不同智能指针unique_ptrunique_ptr拥有一个对象。它是不可复制的,但支持所有权转让。主要是作为已弃用auto_ptr的替代品不能共享控制权,unique_ptr内部将拷贝构造函数和=运算符重载定义为私有的shared_ptrshared_ptrs在内部维护一个资源引用的计数,只有当引用计数为0是时,才会删除资源(析构)。weak_ptrshared_ptr每次拷贝...原创 2019-04-02 11:15:30 · 483 阅读 · 0 评论 -
shared_ptr智能指针实现
实现说明1.要对解引用运算符和箭头运算符进行重载类似: T& operator*(); //解引用重载 T* operator->(); //箭头运算符重载2.自定义析构函数智能指针的成员变量有堆上分配出来的部分,默认的析构函数不能完全的释放资源3.定义拷贝构造函数和拷贝赋值运算符重载引用计数就是在上述函数中完成,所以需要自定义实现实现代码template...原创 2019-04-02 11:17:35 · 717 阅读 · 0 评论 -
封装临界区和条件变量
临界区的三个工具类MutexLock封装临界区,用RAII封装mutex的创建和销毁。MutexLock一般是别的类的数据成员MutexLockGuard封装临界区的进入和退出,即mutex的加锁和解锁。MutexLockGuard通常是一个栈上的变量,作用域刚好等于临界区。Condition封装wait和notify操作Uncopyable封装class Uncopyable{pu...原创 2019-04-02 11:18:37 · 352 阅读 · 0 评论 -
线程同步注意事项
互斥器(mutex)互斥器主要是为了保护共享数据的,保证同一时刻只有一个线程可以操作用RAII手法封装mutex(创建、销毁、加锁、解锁)只用非递归的mutex(就是不可重入的mutex)不手动调用lock和unlock函数,参照第一点的方式在每次构造MutexLockGuard的时候,思考调用栈上已经持有的锁,防止加锁顺序不同导致死锁不使用跨进程的mutex,进程间通信尽量只用TC...原创 2019-04-02 11:20:18 · 296 阅读 · 0 评论 -
排序算法总结
排序排序算法平均时间复杂度最差时间复杂度空间复杂度数据对象稳定性冒泡排序O(n2)O(n2)O(1)稳定选择排序O(n2)O(n2)O(1)数组不稳定、链表稳定插入排序O(n2)O(n2)O(1)稳定快速排序O(n*log2n)O(n2)O(log2n)不稳定堆排序O(n*log2n)O(n*log2n)O...原创 2019-04-02 11:22:19 · 164 阅读 · 0 评论 -
编译错误: call of overloaded ‘isnan(double&)’ is ambiguous isnan(x);
C++11编译报错测试#include <stdlib.h>#include <cmath>#include <stdio.h>using namespace std;int main(int argc, char** argv){ double number = 0; if (isnan(number)) { ...原创 2019-08-22 16:12:22 · 3026 阅读 · 0 评论