C 如何限制物件在堆上或棧上生成

2021-10-01 08:03:53 字數 773 閱讀 5650

1,限制類的物件只能生成在棧上

將 operator new 各種原型設為私有

#include 

class

onlyonstack

~onlyonstack()

private

:

void* operator

new(std::size_t size);

void* operator

new (std::size_t size, const std::nothrow_t¬hrow_value) noexcept;

void* operator

new (std::size_t size, void*ptr) noexcept;

void* operator

new(std::size_t size);

void* operator

new (std::size_t size, const std::nothrow_t¬hrow_value) noexcept;

void* operator

new (std::size_t size, void*ptr) noexcept;};

intmain()

2,限制類的物件只能生成在堆上,有兩種方法

2.1 使用單例模式:建構函式私有,getinstance()中獲取單例時new 出來乙個

2.2 析構函式私有,這樣編譯器就會自動阻止你定義棧上物件,析構函式私有了就需要類提供乙個public的銷毀函式給外部用

C 如何限制物件在堆上或棧上生成

1,限制類的物件只能生成在棧上 將 operator new 各種原型設為私有 include class onlyonstack onlyonstack private void operator new std size t size void operator new std size t s...

C 如何只在堆上或者棧上生成物件

這個是個面試題,不知道的時候確實會一比較懵 那麼具體如何實現呢?棧和堆這兩種記憶體的使用想象大家都了解吧,棧一般是靜態建立乙個物件的時候會有編譯器自動建立,而堆是需要呼叫new來達到目的的。首先若是不能呼叫new,那麼就無法在堆上生成物件了,那麼.class c c private void ope...

C 在堆上建立物件,還是在棧上?

如果需要在堆上建立物件,要麼使用new運算子,要麼使用malloc系列函式。這點沒有異議。真正有異議的是下面的 c 1 object obj 此時,obj是在棧上分配的嗎?要回答這個問題,我們首先要理解這個語句是什麼意思。這個語句就是代表著,在棧上建立物件嗎?其實,這行語句的含義是,使物件obj具有...