Cpp的规范开发建议 | Word count: 392 | Reading time: 2min
Effective C++ 规范 以const、enum、inline替换#define
1 2 3 4 5 6 const unsigned int NUM = 10 ;enum { FIRST = 1 ; SECOND = 2 ; };
手工初始化对象
1 2 3 unsigned int i = 0 ;string str = "" ; int *p = nullptr ;
使用delete和virtual
1 2 3 4 5 6 7 8 9 class Name {public : Name () = default ; Name (std::string name_); virtual ~Name () = default ; private : Name (const Name&) = delete ; Name& operator =(const Name&) = delete ; };
绝不在构造和析构函数中直接或者间接的调用virtual函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 class Name {public : Name () = default ; Name (std::string name_) { SetName (); } virtual ~Name () = default ; virtual SetName () const = 0 ; private : Name (const Name&) = delete ; Name& operator =(const Name&) = delete ; }; class Name {public : Name () = default ; Name (std::string name_) { SetName (); } virtual ~Name () = default ; SetName () const { } private : Name (const Name&) = delete ; Name& operator =(const Name&) = delete ; }; class MyName : public Name {public : MyName () = default ; MyName (std::string name_) : Name (name_) { SetName (); } virtual ~Name () = default ; SetName () const { } private : MyName (const MyName&) = delete ; MyName& operator =(const MyName&) = delete ; };
对象拷贝函数需要复制所有的成员
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Name {public : Name () = default ; Name (std::string name_) { SetName (); } virtual ~Name () = default ; SetName () const { } private : std::string name_; int *age_; Name (const Name& lhr) : name_ (lhr.name_){ age_ = new int ; } Name& operator =(const Name&) = delete ; };
记得对返回的对象指针的释放
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class Name {public : Name () = default ; virtual ~Name () = default ; Name* CreateName () const { return new Name; } private : std::string name_; int *age_; Name (const Name& lhr) = delete ; Name& operator =(const Name&) = delete ; }; void ShowName () { Name old_name; Name* name = old_name.CreateName (); delete name; name = nullptr ; }
成对并相同使用New和Delete
1 2 3 4 5 6 7 std::string* str_ptr1 = new std::string; std::string* str_ptr2 = new std::string[100 ]; delete str_ptr1;delete [] str_ptr2;
使用智能指针指向对象
1 2 3 std::share_ptr<Name> name_ptr = new Name ("YourName" );