程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [C++]Item18. Make interfaces easy to use correctly and hard

[C++]Item18. Make interfaces easy to use correctly and hard

編輯:C++入門知識

接口容易被正確使用,不易被誤用   c++簡單工廠模式時,初級實現為ITest* CreateTestOld(), 然後用戶負責釋放返回的對象。如果忘記釋放就會造成memory leak,所以在設計工廠接口時就應屏蔽這個潛在的問題,這時就可以用智能指針shared_ptr<ITest> CreateTest(),由他負責對象資源的管理,而對客戶端的使用來說更簡潔了。   復制代碼  1 #include "stdafx.h"  2 #include <memory>  3 #include <iostream>  4 using namespace std;  5   6 class ITest  7 {  8 public:  9     virtual void Func() = 0; 10     virtual ~ITest(){} 11 }; 12  13 class Test : public ITest 14 { 15 public: 16     void Func() override 17     { 18         cout << "Test::Func" << endl; 19     } 20     Test() 21     { 22         cout << "Test ctor!" << endl; 23     } 24     ~Test() 25     { 26         cout << "Test destroy!" << endl; 27     } 28  29 }; 30  31 class Factory 32 { 33 public: 34     static shared_ptr<ITest> CreateTest() 35     { 36         return shared_ptr<ITest>(new Test); 37     } 38  39     static ITest* CreateTestOld() 40     { 41         return new Test; 42     } 43 }; 44  45  46 int _tmain(int argc, _TCHAR* argv[]) 47 { 48     auto ptr2 = Factory::CreateTestOld(); 49     ptr2->Func(); 50     delete ptr2; 51  52     auto ptr = Factory::CreateTest(); 53     ptr->Func(); 54  55     return 0; 56 }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved