如果析構函數受到保護,爲什麼不允許在堆棧上分配對象,但在堆上分配是允許的?受保護的堆對象堆棧vs堆棧分配
class Foo
{
public:
Foo()
{
}
protected:
~Foo()
{
}
};
int main()
{
Foo* objOnHeap = new Foo(); // compiles fine
Foo objOnStack; // complains that the destructor is protected
return 0;
}
因爲你不是通過'刪除'摧毀它,dtor將不會被調用。 – songyuanyao
我沒有爲堆上的對象調用'delete'。對於堆棧中的對象,當它超出範圍時會被刪除。 – arunmoezhi
是的,這是區別;該dtor是否被調用。 (隱含或明確無關緊要) – songyuanyao