virtual-destructor

    0熱度

    2回答

    我正在製作一個純粹的虛擬析構函數來強制一個類是抽象的,除了ctor外不包含任何方法。我做的這是一個只有標題的實現 struct abstractSchema { abstractSchema(...): ... { ... } virtual ~abstractSchema() = 0; }; inline abstractSchema::~abstractSchema

    2熱度

    1回答

    有人可以解釋關於C++對象模型的這個理論問題嗎?這是我最近的一次考試,我被它困住了。 問題: 注意到Java,C#和Smalltalk的成功,C++標準委員會決定爲該語言的對象模型增加一個額外的級別。也就是說,每個類都應該有一個在運行時具有表示形式的元類。 反對者說這與語言的基本原理之一相矛盾。哪一個?說明。 對手也聲稱C++有一個額外的「半級」,允許完整的元類級別的一些功能。這是什麼「半個層次」

    1熱度

    1回答

    我正在使用GNU編譯器。類B中的虛擬析構函數不調用Destructor〜D()。有誰能告訴我爲什麼? #include<iostream> using namespace std; class B { double* pd; public: B() { pd=new double [20]; cout<< "20 doubles alloca

    0熱度

    1回答

    我有一個抽象的類,它定義了具體類的常見行爲。因此,將無法清理內存,因爲該類不能被實例化。不過,我知道你需要一個虛擬析構函數,以便派生的析構函數在靜態類型爲Base類時被調用。 這是否意味着我應該總是爲一個抽象類聲明一個虛擬析構函數,但是將實現留空?

    3熱度

    2回答

    BaseClass * p = new DerivedClass(); delete p; 我知道,二號線將調用基類的析構函數,如果沒有派生類的虛析構函數,並且如果它反而會delete正確釋放內存(假設BaseClass的對象佔用8個字節的空間和DerivedClass的一個12 - 它將釋放8或12字節)並在這兩種情況下襬脫對象?

    1熱度

    5回答

    在我的設計過程中,有時會遇到添加/刪除虛擬方法的情況。我知道的經驗法則是,一旦我擁有虛擬方法,我將擁有一個虛擬析構函數。 我的問題:如果在創建類時立即添加虛擬析構函數(即使沒有虛擬方法),是否有任何傷害?基本上這個想法以後不要忘記。特別是對於n個派生類,我不需要在以後的n個地方改變它。

    6熱度

    3回答

    我遇到了由於我的dll和我的實際項目中的不同CRT設置(MTd MDd)而導致的堆腐敗。 我發現奇怪的是,當我將dll中的析構函數設置爲虛擬時,應用程序只會崩潰。 有沒有一個簡單的解釋呢?我知道我不能釋放那些不在我的堆上的內存,但是當我將析構函數定義爲非虛擬的時候,其中的差異究竟在哪裏。 一些代碼只是爲了更清晰一點 的DLL #pragma once class CTestClass { p

    1熱度

    2回答

    我無法理解虛函數。當我重載一個虛函數時,是否僅僅調用了新的派生函數?或者是派生函數和基函數?因爲我注意到,當調用虛擬析構函數時,基類AND派生類析構函數被調用。

    0熱度

    4回答

    所以我有兩個類,一個是抽象的,一個不是。 抽象類是Iterator,具體的是LinkedListIterator。兩者的代碼都在帖子的底部。 我遇到的問題是與代碼,因爲它是在下面,我會在析構函數的最後一行在我LinkedListIterator 1個錯誤說 undefined reference to `Iterator<int>::~Iterator()' 現在我試着註釋掉虛擬〜迭代器()析

    0熱度

    1回答

    如果對象是使用放置new創建的多態類型,是否有方法可以調用析構函數? class AbstractBase{ public: ~virtual AbstractBase(){} virtual void doSomething()=0; }; class Implementation:public virtual AbstractBase{ public: