從函式或方法返回記憶體
一旦需要根據某種條件建立不同型別的物件,就應該使用工廠函式(方法);
工廠函式(或方法)最適合用在需要根據一些存檔資料(例如乙個檔案)來建立不同型別的物件的場合。
任何乙個函式都不應該把它自己的區域性變數的指標作為它的返回值;如果想讓乙個函式在不會留下任何隱患的情況下返回乙個指標,那它只能是乙個動態分配的記憶體塊的基位址。
總之,乙個指向區域性變數的指標只在該函式結束執行之前才是合法和有效的。
下面通過**練習了解本小節的內容:
#include
#include
class pet;
class dog:public pet;
pet::pet(std::string name)
pet::~pet()
void pet::eat()
void pet::play()
dog::dog(std::string name, int count):pet(name)
dog::~dog()
void dog::play()
void dog::bark()
/*宣告乙個工廠函式的原型,如果count<=0,這個函式將返回乙個pet類的例項,如果count>=1,這個函式將返回乙個dog類的例項*/
//count預設值是0,所以如果要建立乙個pet物件,只要傳遞乙個count引數就可以了。
pet *createpet(std::string name, int count = 0);
int main(int argc, char** argv)
pet *createpet(std::string name, int count /* = 0 */)
else
}
執行結果為:
ls1 is eating...
ls1 is playing...
it's pet's destructor...
ls2is
eating...
ls2plays 3 times
aday...
it's
dog's
destructor...
it's
pet's
destructor...
c++入門(14):動態記憶體管理 C 從函式返回指標
c 不支援在函式外返回區域性變數的位址,除非定義區域性變數為 static 變數。include include include using namespace std 要生成和返回隨機數的函式 int getrandom return r 要呼叫上面定義函式的主函式 int main return...
從函式中返回多個值的方法
原文 第一種方法是利用全域性變數,因此根本不用返回,只要直接給全域性變數賦值即可。例 dim intnumber 1 intnumber 1 40 dim intnumber 2 intnumber 2 80 public sub passvalues intnumber 1 intnumber 1...
C語言函式返回指標方法
1 將函式內部定義的變數用static修飾 由於static修飾的變數,分配在靜態記憶體區 類似於全域性變數區 函式返回時,並不會釋放記憶體,因此可以將要返回的變數加static修飾。2 使用分配在堆上的記憶體 分配在堆上的記憶體主要指通過malloc calloc realloc等函式動態分配的記...