我不確定這是否可能。防止在堆棧上創建類的層次結構
我需要防止派生自X的所有類被實例化爲本地堆棧或成員變量。我將所有的析構函數都保護起來,並且就外部範圍而言,這個技巧已經實現了。但是我需要阻止它們自己實例化。我的意思是,如果Y具有類型Z的成員變量或在其方法中實例化Z類型的局部變量,那麼它不會削減它。
現在我可以在層次結構樹的所有樹葉中創建私有析構函數,但問題是每個不應該被允許成爲(堆)變量。在X < - Y < - Z的情況下,所有三個都應該實例化,但X和Y不能有私有析構函數。此外,即使這並沒有阻止我在Z方法中使用局部變量Z類型。
我猜他們的構造函數是私有的,並且添加操作符new作爲朋友,它們都可以做到這一點,但這是很多額外的工作(因爲我們使用幾個新的操作符版本)並且層次很大。
那麼,有沒有一種方法有一個(最好)編譯時,或這些對象的堆棧實例化的運行時錯誤,而不訴諸私人構造 - 朋友新路?
<編輯> 事情是這個項目的以前的程序員寫了大量的代碼,並且這個層次結構中的所有類都有非常複雜的析構函數。而且,作者在這些破壞者中不分青紅皁白地稱爲虛擬方法,這導致了很多(對他們)無法解釋的崩潰和內存破壞。現在將所有析構函數轉換爲obj->Release()
模式,並且在最上面的版本中我有delete this
。顯然這不適用於堆棧對象,現在我介紹了一些自己的崩潰。另外我有點短的時間和運行/等待崩潰/解決這個特定崩潰方法是非常非常慢 < /編輯>
我認爲變量的位置取決於你如何聲明它? –
一個對象通常不應該在乎它的存儲方式。這違反了單一職責的習慣用法。你所要求的是對語言的嚴重濫用,所以我不希望一個答案是美麗的。 –