2010-09-30 54 views
0

你有一個類A,你設置構造函數是私有的,所以客戶端不能調用C++ - 如何防止對象在堆棧上分配?

A a; 

到堆棧創建OBJ。 但是有一天另一名開發人員增加了一個新的構造函數:

A(int) 

,並嘗試稱之爲 「A一(1);」在main()中。所以這會在棧上創建一個obj。你如何預防這種情況?

這是我的解決方案,但我不知道它是否有意義。

使用私有或受保護的析構函數的類A和提供工廠函數來分配對象,並釋放資源的函數(即調用析構函數)

謝謝

+8

編譯該庫,只給其他開發者庫和硬拷貝。真的,你在問如何編寫防止代碼被修改的代碼?這是一個團隊過程問題,而不是C++或編碼問題。它可能就像評論一樣簡單,或者像你在腳後跟上唯一記錄源碼控制密碼的記錄一樣複雜,Achilles。 – 2010-09-30 03:37:57

+0

這只是一個技巧性的問題,它可能沒有實際用法。 - 謝謝 – q0987 2010-09-30 03:39:13

+0

我和Tony在一起。想想你的問題:什麼是阻止他們公開構建析構函數,甚至是公開第一個構造函數? – JoshD 2010-09-30 03:40:32

回答

6

讓析構函數私有/保護。在不是相應類的朋友或成員的實例化上下文的堆棧上工作。

2

一旦你向用戶提供了源代碼,你就委託了用戶並允許他按照他的要求修改代碼,但是你不希望他改變它,這就是衝突。