C 如何禁止掉物件的複製操作

2022-02-02 14:34:22 字數 1140 閱讀 9257

最容易想到的是將拷貝建構函式與賦值函式宣告為private。但是,private只是說外部不能直接呼叫,但是可以間接通過類的成員函式與友元函式對其訪問。那麼怎麼辦呢?

----》在類中,允許宣告函式,但是,可以不用實現該函式,這是合法的。那麼即使是在public中宣告函式,但是不實現,那麼呼叫這個函式也是會出錯的。

那麼好了我們可以特性一起使用,boost::noncopyable

[cpp]view plain

copy

print

?#ifndef boost_noncopyable_hpp_included    

#define boost_noncopyable_hpp_included    

namespace boost     

~noncopyable() {}    

private:  // emphasize the following members are private    

noncopyable( const noncopyable& );    

const noncopyable& operator=( const noncopyable& );    

};    

}    

typedef noncopyable_::noncopyable noncopyable;    

} // namespace boost    

#endif  // boost_noncopyable_hpp_included    

為了禁止拷貝物件,我們只需要讓其私有繼承自boost::noncopyable,

class student:private boost::noncopyable

當呼叫到派生類的拷貝建構函式或賦值函式進行複製時,不可避免的要呼叫基類對應的函式,因為這些操作是private,這樣的操作會被編譯器拒絕。

需要注意,多重繼承有時會使空基類noncopyable優化失效,所以這不適合用於多重繼承的情形。

另外,如果只是不想要使用預設的拷貝建構函式或賦值函式,可以使用c++11提供的delete,

class myclass

當然,一旦函式被delete過了,那麼過載該函式也是非法的,該函式我們習慣上稱為刪除函式。

C 如何禁止掉物件的複製操作

最容易想到的是將拷貝建構函式與賦值函式宣告為private。但是,private只是說外部不能直接呼叫,但是可以間接通過類的成員函式與友元函式對其訪問。那麼怎麼辦呢?在類中,允許宣告函式,但是,可以不用實現該函式,這是合法的。那麼即使是在public中宣告函式,但是不實現,那麼呼叫這個函式也是會出錯...

C 如何禁止掉物件的複製操作

那麼好了我們可以特性一起使用,boost noncopyable cpp view plain copy print?ifndef boost noncopyable hpp included define boost noncopyable hpp included namespace boost...

C 如何徹底禁止掉物件的複製操作

在物件導向的世界中,有一些物件是需要保持獨一無二的,如設計乙個 公民 的類,每個公民都是唯一的,有唯一的身份證號與其對應。任何對該物件的複製都是毫無意義的,需要在類的設計上被徹底禁止掉。普通的c 菜鳥會說,那我在類的設計裡,不去實現拷貝構造和賦值操作不就完了嗎?其實不行!c 會在背後偷偷的幫你現實乙...