91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中怎么使用工廠函數

發布時間:2021-11-29 13:47:29 來源:億速云 閱讀:279 作者:iii 欄目:大數據

本篇內容介紹了“C++中怎么使用工廠函數”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

如果在構造過程中需要“虛行為”,使用工廠函數 
Reason(原因)

如果基類對象的狀態必須依賴對象的派生部分,我們需要使用虛函數(或等價物)以便盡量壓縮沒有完美構造完成的對象被錯誤使用的時間窗口。

Note(注意)

工廠的返回類型通常應該默認返回unique_ptr;如果有些用法需要共享,調用者可以將unique_ptr移動到shared_ptr。然而,如果工廠的作者知道返回對象的所有的用法都是共享方式,也可以返回shared_ptr,這樣在函數體內部可以使用make_shared節約一次內存分配。

Example, bad(反面示例)
class B {
public:
   B() {
       /* ... */
       f(); // BAD: C.82: Don't call virtual functions in constructors and destructors
       /* ... */
   }

   virtual void f() = 0;
};
Example(示例)
class B {
protected:
   class Token {};

public:
   explicit B(Token) { /* ... */ }  // create an imperfectly initialized object
   virtual void f() = 0;

   template<class T>
   static shared_ptr<T> create()    // interface for creating shared objects
   {
       auto p = make_shared<T>(typename T::Token{});
       p->post_initialize();
       return p;
   }

protected:
   virtual void post_initialize()   // called right after construction
       { /* ... */ f(); /* ... */ } // GOOD: virtual dispatch is safe
};

class D : public B {                 // some derived class
protected:
   class Token {};

public:
   explicit D(Token) : B{ B::Token{} } {}
   void f() override { /* ...  */ };

protected:
   template<class T>
   friend shared_ptr<T> B::create();
};

shared_ptr<D> p = D::create<D>();  // creating a D object

make_shared調用的構造函數必須是公開的。通過要求一個保護的令牌保證構造函數不能被公開調用,這樣我們就避免了不完全構造的對象流出。由于提供了一個工廠方法create(),(自由存儲上的)構造過程可以便利地實施。

Note(注意)

常規的工廠方法在自由存儲上分配對象內存,而不是在堆棧或者封閉的對象內。

“C++中怎么使用工廠函數”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

容城县| 卓尼县| 玉门市| 石河子市| 探索| 定边县| 永宁县| 仲巴县| 玉林市| 东光县| 南华县| 宜春市| 乐亭县| 兴文县| 徐汇区| 富源县| 平江县| 林芝县| 台中市| 藁城市| 静海县| 太仆寺旗| 兰溪市| 周宁县| 鹤峰县| 江油市| 罗山县| 定安县| 乌什县| 仁寿县| 绥中县| 清原| 邹平县| 新巴尔虎右旗| 来宾市| 龙泉市| 屯门区| 谷城县| 连南| 长宁县| 扎赉特旗|