原创 高級指針

(一)、二維數組與二級指針參數   二維數組做參數:        二維數組做參數與一維數組做參數一樣,傳遞的都是首元素的地址,只不過二維數組的每個元素又是一個一維數組 。例:int arr[5][10];       這是一個5行10列的

原创 new/delete和new[]/delete[]的底層調用和簡單實現

在使用new的時候做了兩件事:1、調用operator new分配空間2、調用構造函數初始化對象在使用delete的時候也做了兩件事:1、調用析構函數清理對象2、調用operator delete函數釋放空間在使用new[N]的時候也做了兩

原创 shared_ptr循環引用&定置刪除器

shared_ptr雖然方便,但是它有着一個致命的缺陷就是循環引用問題,因爲shared_ptr本身並沒有能力解決這個問題,所以我們又引入了弱指針weak_ptr來輔助shared_ptr解決這個問題。那麼循環引用又是什麼場景?舉個栗子:假

原创 鏈表模板、隊列模板、順序表模板、棧模板、

//利用容器適配器實現棧和隊列 #pragma once #include<iostream> #include<string> #include<cassert> using namespace std; template<typ

原创 c語言知識框架

想要這張圖的發送“C語言知識框架”到[email protected]

原创 寫時拷貝技術

Copy On Write(COW):寫時拷貝技術一、什麼是寫時拷貝技術:寫時拷貝技術可以理解爲“寫的時候纔去分配空間”,這實際上是一種拖延戰術。舉個栗子:二、寫時拷貝技術原理:  寫時拷貝技術是通過"引用計數"實現的,在分配空間的時候多分

原创 智能指針簡單實現

   很多人都誤以爲智能指針是一個指針,其實不然,智能指針不是指針,智能指針是一個模板,由智能指針實例化出來的的對象具有和常規指針相似的行爲,但是他能夠自動的釋放所指向的對象,所以我們稱之爲智能指針。如果我們用普通指針來創建一個指向某個對象

原创 通訊錄-----第一版

//基於順序表實現的簡易通訊錄-----1 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<string.h> typede

原创 深入理解命名空間

一、爲什麼使用命名空間  一個大型的工程往往是由若干個人獨立完成的,不同的人分別完成不同的部分,最後再組合成一個完整的程序。由於各個頭文件是由不同的人設計的,有可能在不同的頭文件中用了相同的名字來命名所定義的類或函數,這樣在程序中就會出現名

原创 類型萃取

   在C++中我們可以通過typeid來獲取一個類型的名稱(內置類型和自定義類型都可以),但是我們不能用這種方式獲取來的名稱做變量的聲明。那麼在C++中怎樣識別對象的類型呢??我們可以通過類型萃取的方式來區分內置類型和自定義類型。  例如

原创 深拷貝與淺拷貝

一、淺拷貝和深拷貝   所謂淺拷貝,就是由默認的拷貝構造函數所實現的對數據成員逐一賦值。若類中含有指針類型的數據,這種方式只是簡單的把指針的指向賦值給新成員,但並沒有給新成員分配內存,因此這種方式必然會導致錯誤。爲了解決淺拷貝出現的錯誤,必

原创 強制類型轉換

C++中的強制類型轉換:static_cast、reinterpret_cast、const_cast、dynamic_cast. static_cast:用於非多態類型之間的轉換(靜態轉換),任何標準類型之間都可以用它,但它不能用於不相

原创 內存對齊與自定義類型

一、內存對齊  (一)、爲什麼會有內存對齊?    1、爲了提高程序的性能,數據結構(尤其是棧)應該儘可能的在自然邊界上對齊。原因是爲了訪問未對齊的內存,處理器需要進行兩次訪問,而訪問對齊的內存,只需要一次就夠了。這種方式稱作“以空間換時間

原创 字符串函數番外篇

   通常看到strrchr這個函數,人們很自然的想問庫裏面有沒有strrstr這個函數呢???   答案是:沒有。   但是我們可以自己實現一個strrstr函數,它的功能是查找最後一次出現的子字符串,如果找打則返回這個地址,如果沒找到則

原创 深入C++對象模型&虛函數表

多態的實現機制:       C++中虛函數的主要作用就是用來實現多態,就是使用基類的指針或者引用調用重寫的虛函數,當父類的指針或引用指向父類對象時調用的是父類虛函數,當指向子類對象時調用的是子類的虛函數。那麼這又是怎麼實現的呢???