More Effective C++之智能指標

智能指標具有非常強大的能力,謹慎而明智的選擇能帶來極大的好處。我不否認智能指標的能力,雖然我在之前的否認過auto_ptr。可能由於我自身能力的限制,體會不到auto_ptr的好處,但這樣的可能性我覺得已經不大了。但auto_ptr是最簡單的智能指標,在它的周圍存在大量的作品,這些作品包括Boost、Loki、ACE等等,但是可惜的是目前沒有一個我能夠說我很熟悉,那麼本篇只是作為一個入門,在此基礎上,應當閱讀Boost、Loki、ACE相關源碼。Smart

奇技淫巧C++之傳回值重載

C++當然是不能僅僅通過傳回值重載函數的,但是,我們往往會想:要是支援傳回值重載就好了。現在,我就從C++的某個頗受爭議的角落,為您發掘一點東西。假設有這樣一個函數:type getvalue(const DBField& fd);可是,DBField實際的資料類型對於getvalue來說,並不瞭解,一個常見的解決方案是:template<typename T>T getvalue(const DBField&

奇技淫巧C++之懶惰計算

考慮這樣一個運算式語句:String result = str_you + “said: ” + str_he + “ said: @#$% ” + str_i + “said: over!”;對於這樣一個語句,程式如何求值呢?假設str_you是一個典型std::string類型,這個語句需要做5 次operator+運算,多個string臨時對象,還極有可能的,多次的記憶體配置操作。如果你的team

C++箴言:謹慎使用模板元編程

template metaprogramming (TMP)(模板元編程)是寫 template-based(基於模板)的運行於編譯期間的 C++ 程式的過程。考慮一下:一個 template metaprogram(模板元程式)是用 C++ 寫的運行於 C++ 編譯器中的程式。當一個 TMP 程式運行完成,它的輸出——從 templates(模板)執行個體化出的 C++

C++的EXIT與解構函式

幾乎在每本課本中幾乎都是這樣寫的,當一個類執行個體化以後,必將執行建構函式,那麼在該類被釋放的時候,必將執行解構函式。似乎在人們的印象裡,建構函式與解構函式如同一對雙胞胎一樣,執行完建構函式,必將會執行解構函式......今天我做了個實驗,徹底的推翻了這個理論。代碼如下:#include "stdafx.h"using namespace std;class mycs{ public:  mycs()  {   cout<<"建構函式"<

C++ sizeof使用規則及陷阱分析

1、什麼是sizeof首先看一下sizeof在msdn上的定義:The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.看到return這個字眼,是不是想到了函數?錯了,sizeof不是一個函數,你見過給一個函數傳參數,

C++信徒的摩西十戒

這是C++信徒的摩西十戒,雖然說的是十戒,實際上有十四條,但這十四條都值得將其銘刻在顯示器的邊緣,供C++程式員們每日膜拜。我要將其銘刻在我的blog裡,銘刻在我的記憶裡,直到它們成為我思維的一部分。第0條:不要拘泥於細節(瞭解哪些東西不應該標準化)·縮排:不必規定如何縮排,每個人遵從一個自己喜歡的規則即可。·行長:今天已經沒有太大的必要限制80個字元了,當然,越有利於閱讀越好。·命名:不要太嚴苛,除了宏應該全部大寫外,別的只要遵從某種大家接受的風格即可

More Effective C++:類型轉換

仔細想想地位卑賤的類型轉換功能(cast),其在程式設計中的地位就象goto語句一樣令人鄙視。但是它還不是無法令人忍受,因為當在某些緊要的關頭,類型轉換還是必需的,這時它是一個必需品。不過C風格的類型轉換並不代表所有的類型轉換功能。一來它們過於粗魯,能允許你在任何類型之間進行轉換。不過如果要進行更精確的類型轉換,這會是一個優點。在這些類型轉換中存在著巨大的不同,例如把一個指向const對象的指標(pointer-to-const-object)轉換成指向非const對象的指標(pointer-t

More Effective C++:不使用多態性數組

類繼承的最重要的特性是你可以通過基類指標或引用來操作衍生類別。這樣的指標或引用具有行為的多態性,就好像它們同時具有多種形態。C++允許你通過基類指標和引用來操作衍生類別數組。不過這根本就不是一個特性,因為這樣的代碼根本無法如你所願地那樣運行。假設你有一個類BST(比如是搜尋樹對象)和繼承自BST類的衍生類別BalancedBST:class BST { ... };class BalancedBST: public BST { ...

C++中new和delete導致的記憶體配置問題詳解

在嵌入式系統中使用C++的一個常見問題是記憶體配置,即對new 和 delete 操作符的失控。具有諷刺意味的是,問題的根源卻是C++對記憶體的管理非常的容易而且安全。具體地說,當一個對象被消除時,它的解構函式能夠安全的釋放所分配的記憶體。這當然是個好事情,但是這種使用的簡單性使得程式員們過度使用new 和

C++記憶體配置五種方法的區別

 在C++中,記憶體分成5個區,他們分別是堆、棧、自由儲存區、全域/靜態儲存區和常量儲存區。棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是局部變數、函數參數等。堆,就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般一個new就要對應一個delete。如果程式員沒有釋放掉,那麼在程式結束後,作業系統會自動回收。自由儲存區,就是那些由malloc等分配的記憶體塊,他和堆是十分相似的,不過它是用free來結束自己的生命的。

如何編寫異常安全的C++代碼

關於C++中異常的爭論何其多也,但往往是一些不合事實的誤解。異常曾經是一個難以用好的語言特性,幸運的是,隨著C++社區經驗的積累,今天我們已經有足夠的知識輕鬆編寫異常安全的代碼了,而且編寫異常安全的代碼一般也不會對效能造成影響。使用異常還是返回錯誤碼?這是個爭論不休的話題。大家一定聽說過這樣的說法:只有在真正異常的時候,才使用異常。那什麼是“真正異常的時候”?在回答這個問題以前,讓我們先看一看程式設計中的不變式原理。對象就是屬性彙總加方法,如何判定一個對象的屬性彙總是不是

單元測試工具C++ Test簡介

C++ Test是Parasoft公司出品的一個針對C/C++原始碼進行自動化單元測試的工具。它可以對原始碼進行三種測試:白盒測試、黑箱測試以及迴歸功測試。白盒測試C++ Test對C/C++原始碼進行分析,針對所有的類的成員函數(包括:公用的、保護的以及私人類型的)進行測試。測試的方法是判斷當輸入一個非法的參數時,有關函數能否正確處理。(Record命令)在此狀態下軟體針對指定的檔案、類或者是函數自動產生測試案例。黑箱測試不對原始碼進行分析,並且只針對類的公用介面函數進行測試。(Play命令)

淺談C/C++記憶體流失及偵查工具

對於一個c/c++程式員來說,記憶體流失是一個常見的也是令人頭疼的問題。已經有許多技術被研究出來以應對這個問題,比如Smart Pointer,Garbage Collection等。Smart Pointer技術比較成熟,STL中已經包含支援Smart Pointer的class,但是它的使用似乎並不廣泛,而且它也不能解決所有的問題;Garbage

菜鳥也能搞定C++記憶體流失

背景C++記憶體配置與釋放均由使用者代碼自行控制,靈活的機制有如潘多拉之盒,即讓程式員有了更廣的發揮空間,也產生了代代相傳的記憶體流失問題。對於新手來說,最常犯的錯誤就是new出一個對象而忘記釋放,對於一般小應用程式來說,一點記憶體空間不算什麼。但是當記憶體流失問題出現在需要24小時啟動並執行平台類程式上的時候,將會使系統可用記憶體飛速減少,最後耗盡系統資源,導致系統崩潰。所以學會如何防止並檢查記憶體流失,是一個合格的c++程式員必須具備的能力。但是由於記憶體流失是程式運行並滿足一定條件時才會發

C++中介面與實現分離的技術

在用C++寫要匯出類的庫時,我們經常只想暴露介面,而隱藏類的實現細節。也就是說我們提供的標頭檔裡只提供要暴露的公用成員函數的聲明,類的其他所有資訊都不會在這個標頭檔裡面顯示出來。這個時候就要用到介面與實現分離的技術。下面用一個最簡單的例子來說明。類ClxExp是我們要匯出的類,其中有一個私人成員變數是ClxTest類的對象,各個檔案內容如下:lxTest.h檔案內容:class ClxTest{ public:  ClxTest();  virtual ~ClxTest();  void

C++箴言:理解new-handler的行為

當 operator new 不能滿足一個記憶體配置請求時,它拋出一個 exception(異常)。很久以前,他返回一個 null pointer(null 指標),而一些比較老的編譯器還在這樣做。你依然能達到以前的目的(在一定程度上),但是我要到本文的最後再討論它。在 operator new 因回應一個無法滿足的記憶體請求而拋出一個 exception 之前,它先調用一個可以由客戶指定的被稱為 new-handler 的 error-handling

C宏——智者的利刃,愚者的惡夢!

水平不高不低的C++程式員最喜歡掛在嘴上的一句話就是:C宏,萬惡之首,錯誤的開端,應該被廢棄。請注意,我用了一句不敬的修飾語“水平不高不低的”。為什麼這麼說?因為水平低都插不上話,都在在靜靜地聽老前輩佈道呢。水平高的,比如Bane Stroustrup老人家,也只是說若干種場合下C++語言能夠提供比C macro更好的解決方案,而沒有完全否定C

C/C++程式員應聘常見面試題深入剖析

1.引言本文的寫作目的並不在於提供C/C++程式員求職面試指導,而旨在從技術上分析面試題的內涵。文中的大多數面試題來自各大論壇,部分試題解答也參考了網友的意見。許多面試題看似簡單,卻需要深厚的基本功才能給出完美的解答。企業要求面試者寫一個最簡單的strcpy函數都可看出面試者在技術上究竟達到了怎樣的程度,我們能真正寫好一個strcpy函數嗎?我們都覺得自己能,可是我們寫出的strcpy很可能只能拿到10分中的2分。讀者可從本文看到strcpy函數從2分到10分解答的例子,看看自己屬於什麼樣的層次

C++箴言:為類型資訊使用特徵類

STL 主要是由 containers(容器),iterators(迭代器)和 algorithms(演算法)的 templates(模板)構成的,但是也有幾個 utility templates(實用模板)。其中一個被稱為 advance。advance 將一個指定的 iterator(迭代器)移動一個指定的距離:template<typename IterT, typename DistT> // move iter d unitsvoid advance(IterT&

總頁數: 4314 1 .... 2899 2900 2901 2902 2903 .... 4314 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.