原创 C++中new和malloc的區別(C++面試常問題目)

new分配內存按照數據類型進行分配,malloc分配內存按照指定的大小分配; new返回的是指定對象的指針,而malloc返回的是void*,因此malloc的返回值一般都需要進行類型轉化。 new不僅分配一段內存,而且會調用

原创 STL之序列式容器(二)、array容器

一、array的用法及初始化 array<T,N> 模板定義了一種相當於標準數組的容器類型。它是一個有 N 個 T 類型元素的固定序列。除了需要指定元素的類型和個數之外,它和常規數組沒有太大的差別。顯然,不能增加或刪除元素。 模板

原创 STL之序列式容器(一)、什麼是序列式容器

前言 序列容器以線性序列的方式存儲元素。它沒有對元素進行排序,元素的順序和存儲它們的順序相同。一般來說,有 5 種標準的序列容器,每種容器都具有不同的特性: array<T,N> (數組容器) :是一個長度固定的序列,有N個T類

原创 智能指針有沒有內存泄露的情況?

當兩個對象相互使用一個shared_ptr成員變量指向對方,會造成循環引用,使引用計數失效,從而導致內存泄漏。 上述代碼中,parent有一個shared_ptr類型的成員指向孩子,而child也有一個shared_ptr

原创 C++ STL中,map和set有什麼區別,分別又是怎麼實現的?

map和set都是C++的關聯容器,其底層實現都是紅黑樹(RB-Tree)。由於 map 和set所開放的各種操作接口,RB-tree 也都提供了,所以幾乎所有的 map 和set的操作行爲,都只是轉調 RB-tree 的操作行爲

原创 進程與線程的概念、區別及各自通信方式

進程與線程的概念 進程是對運行時程序的封裝,是系統進行資源調度和分配的的基本單位,實現了操作系統的併發; 線程是進程的子任務,是CPU調度和分派的基本單位,用於保證程序的實時性,實現進程內部的併發;線程是操作系統可識別的最小執行

原创 爲什麼析構函數必須是虛函數?爲什麼C++默認的析構函數不是虛函數?

將可能會被繼承的父類的析構函數設置爲虛函數,可以保證當我們new一個子類,然後使用基類指針指向該子類對象,釋放基類指針時可以釋放掉子類的空間,防止內存泄漏。 C++默認的析構函數不是虛函數是因爲虛函數需要額外的虛函數表和虛表

原创 STL之序列式容器(三)、vector容器

一、vector的使用、創建及初始化 vector<T> 容器是包含 T 類型元素的序列容器,和 array<T,N> 容器相似,不同的是 vector<T> 容器的大小可以自動增長,從而可以包含任意數量的元素;因此類型參數 T

原创 STL之字符串類模板 string(二)、C++ basic_string(字符串類模板)

“字符” 本身是個有趣的抽象概念。例如,在紙上或者屏幕上,字符 “C” 僅僅是一段曲線而已。在計算機中,用一個 8 Byte 存儲該字符,並賦值 67;字符 “C” 還是拉丁字母的第三個字母;在化學專業,字符 “C” 是原子碳的

原创 STL之字符串類模板 string(三)、C++ string類成員函數

前言 之所以拋棄char*的字符串而選用C++標準程序庫中的string類,是因爲他和前者比較起來,不必 擔心內存是否足夠、字符串長度等等,而且作爲一個類出現,他集成的操作函數足以完成我們大多數情況下(甚至是100%)的需要。我們

原创 如何解決智能指針的內存泄漏

爲了解決循環引用導致的內存泄漏,引入了weak_ptr弱指針,weak_ptr的構造函數不會修改引用計數的值,從而不會對對象的內存進行管理,其類似一個普通指針,但不指向引用計數的共享內存,但是其可以檢測到所管理的對象是否已經被釋

原创 簡要介紹下Linux中幾種文件傳輸命令sz、rz、sftp、scp

一、sftp sftp,全稱Secure File Transfer Protocol, 是一個基於SSH安全協議的文件傳輸管理工具。由於它是基於SSH的,會在傳輸過程中對用戶的密碼、數據等敏感信息進行加密,因此可以有效的防止用戶

原创 在linux環境下,使用erase刪除vector元素注意事項,刪除的元素居然自動存放在改隊列末尾

工作8年,第一次遇到這種問題,百思不得其解,使用erase刪除vector元素,刪除正常,但後面打印數據發現,元素居然依然存在。當然其實最終發現原因也是不注意代碼細節引起的。先上代碼。 注:以下代碼在windows環境直接報錯,而

原创 git更新本地代碼到遠程分支

1、git status 查看當前有變更的代碼文件。 2、git add ./ 你本地所有修改了的文件添加到暫存區。 3、git commit -m “xxxxx” 引號裏面是你的介紹,就是你的這次的提交是什麼內容,便於你以後

原创 C++四種類型轉換(reinterpret_cast、dynamic_cast、const_cast、static_cast)描述

reinterpret_cast:可以用於任意類型的指針之間的轉換,對轉換的結果不做任何保證。 dynamic_cast:這種其實也是不被推薦使用的,更多使用static_cast,dynamic本身只能用於存在虛函數的父子關