只允許物件生成於堆內

2021-09-08 16:36:20 字數 1189 閱讀 3121

只允許物件生成於堆內?怎麼理解?腫麼辦?

我們已經知道,假如手頭上有乙個類person,當你在程式中寫下person objtemp;時,

編譯器悄悄地做了兩件事:呼叫constructor構造物件objtemp,而在彈棧時,呼叫析構函式destructor析構掉物件objtemp。

物件rn的構造和析構全部由編譯器負責,這是棧的特性!

諸所周知,物件rn生成於棧內。

而我們現在的要求是什麼?「只允許物件生成於堆內。」rn明顯違背了我們的要求,也就意味著它應該被禁止。

那這種 「坑爹型」的事情腫麼辦呢?有人想說,只要讓person的建構函式或者析構函式成為private就ok了。

也許許多人真會有這樣的第一想法,假使那樣,咱再往下進一步思考。

如果那樣的話,這個類可以實現繼承嗎?no,即就是禁止繼承。

另外,這個類允許其他類擁有它的物件嗎?no,即就是禁止包含。

那怎麼辦呢? 解決的方法也很簡單,解除繼承的***只需讓person的析構函式成為protected就可以了;

解決內含的***只需讓test中的成員變數ps成為person*型別並在test的構造/析構函式中對成員變數做初始化和釋放操作就可以了。

本例完整的**如下所示。

1 #include2

using

namespace

std;34

class

person

511 person(int

x)12

16void

destroy()

1720

21protected

:22 ~person()

2326

private:27

inta;

28};

2930

class student:public

person31;

3435

class

test

3642 ~test()

4346

private

:47 person *ps;

48};

4950

void

main()

51

good good study, day day up.

順序  選擇  迴圈  堅持

迭代器和迭代物件 生成器

iterator 迭代器物件,必須要實現 next 魔法函式 iterable 可迭代物件,繼承 iterator,必須要實現 iter 魔法函式 迭代器 iterator 與可迭代物件 iterable 的區別 生成器生成器 函式中只要有 yield,這個函式就會變成生成器。每次執行到 yield...

巧用物件,生成不重複隨機數

有時候我們需要在一定範圍內生成一組不重複的隨機數組,我們可能會這樣做 需求 在乙個已知的陣列中,隨機選取一部分組成新的資料,要求陣列元素不重複出現 常規實現 var arr 3,5,30,20,21,50,80,6,8,10,15 去重一下,不去重,可能造成死迴圈 arr arr.filter fu...

可迭代物件,生成器,迭代器

classa def init self self.count 10def iter self print 執行 iter return self def next self print 執行 next if self.count 0 self.count 1return self.count el...