一所大學在工作中僅使用靜態方法創建了一個類。因爲他想避免實例化,所以他添加了一個(私有)構造函數。目前爲止沒有問題。但是構造函數只是被聲明並沒有實現。因此,在使用一次時你會得到一個「未定義的參考」。構造函數聲明沒有實現良好的風格,以避免實例化?
Imho它必須足以使構造函數保持私有狀態 - 而沒有實現的聲明是醜陋的。你對此有何看法?
一所大學在工作中僅使用靜態方法創建了一個類。因爲他想避免實例化,所以他添加了一個(私有)構造函數。目前爲止沒有問題。但是構造函數只是被聲明並沒有實現。因此,在使用一次時你會得到一個「未定義的參考」。構造函數聲明沒有實現良好的風格,以避免實例化?
Imho它必須足以使構造函數保持私有狀態 - 而沒有實現的聲明是醜陋的。你對此有何看法?
我看到你的關注。
事實上,將複製構造函數設爲私有,然後將其保留爲未實現,這是常見的做法,在某些情況下它肯定是必需的。這導致定義一個衆所周知的C++習慣用法,Non Copyable Mixin給它更多的「可見性」。但即使不使用不可複製的mixin,並且本地應用瞭解決方案,它也完全可以接受(因爲它是已知的習慣用語)。
在你的具體情況,因爲據我所知我們不是在談論複製構造函數,而是任何構造函數(該類只是一些靜態方法的容器,你不希望它被初始化),我認爲使用命名空間和聲明你的函數將是一個更好的解決方案。
其實例化這樣的對象不會造成任何傷害 - 程序行爲不會改變。如果你仍然想禁止實例化,那麼是的,你最好不要實現構造函數。如果你有一個空的構造函數,它可能會從類的朋友和類的成員函數中調用。詳細信息請參見this question。
但對我來說,它看起來像一個錯誤:忘記實現它。是不是更私人更明確?提升方式是提供基類不可複製 - 所以它隱藏了這種黑客攻擊,也是某種文檔。 – Charly
@Charly:是的,它們都是私有的並且未實現,並且在構造函數聲明之上添加類似於「該類不應該被實例化」的註釋。 – sharptooth
你是在C++中的含義? – sergio
是的,我的意思是C++ – Charly