[英]Making sure copy constructor is never called when move constructor exists
在設計可以移動但不能復制的類時,將復制構造函數聲明為私有是很自然的。 當只有可移動和平凡的可復制對象作為實例成員時,允許編譯器隱式生成移動構造函數是有意義的。
但是,當支持VS11和G ++ 4.7時,我發現了一個不兼容的問題:
正如你所看到的,這讓我陷入了困境。 我的班級不得復制。 我必須支持 VS11和MinGW / GCC。 我需要我的班級可移動。
我誤解了什么,或者是否有解決這個小問題的方法? 如果生成對復制構造函數的調用,是否可以使編譯失敗? 這個問題有什么更好的解決方案
如果將其添加到源文件中
#ifdef _MSC_VER
#define noexcept
#endif
您將能夠在GCC上將其定義為noexcept
,但VC ++將忽略noexcept
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.