簡體   English   中英

確保在移動構造函數存在時永遠不會調用復制構造函數

[英]Making sure copy constructor is never called when move constructor exists

在設計可以移動但不能復制的類時,將復制構造函數聲明為私有是很自然的。 當只有可移動和平凡的可復制對象作為實例成員時,允許編譯器隱式生成移動構造函數是有意義的。

但是,當支持VS11和G ++ 4.7時,我發現了一個不兼容的問題:

  • VS11需要明確定義的移動構造函數
  • G ++要求顯式移動構造函數具有匹配的公共復制構造函數或noexcept關鍵字
  • VS11不支持noexcept關鍵字。

正如你所看到的,這讓我陷入了困境。 我的班級不得復制。 必須支持 VS11和MinGW / GCC。 需要我的班級可移動。

我誤解了什么,或者是否有解決這個小問題的方法? 如果生成對復制構造函數的調用,是否可以使編譯失敗? 這個問題有什么更好的解決方案

如果將其添加到源文件中

#ifdef _MSC_VER
#define noexcept
#endif

您將能夠在GCC上將其定義為noexcept ,但VC ++將忽略noexcept

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM