2013-03-01 108 views
0

有人可以解釋這實際上代表什麼?指針功能

Foo *getfoo() 
{ 
    return foo_object; 
} 

Foo這是一類。 我的問題是函數名稱前的指針代表什麼?

+2

'Foo *'是返回類型。你最好認爲函數簽名是'(Foo *)getfoo'而不是'Foo(* getfoo)'。 – neuront 2013-03-01 07:22:30

+0

@neuront:你不能在返回類型周圍放置圓括號,它會使聲明無效。 'Foo * foo()','Foo * foo()'和'Foo(* foo())'都是等價的(即使最後一個有點誤導)。 '(Foo *)foo()'是一個對'foo'的調用,並在返回類型上進行強制轉換。 – 2013-03-01 08:12:34

+0

@CharlesBailey你是對的。這在語法中是不合法的,我寫的只是幫助理解函數的語法結構。 – neuront 2013-03-01 08:22:56

回答

1

正如其他人指出的,'Foo *'語法意味着函數正在返回一個指向內存中某個地方的指針,而不是一個對象本身。

它的含義是,如果你得到這個指針,這意味着getfoo()可能已經爲它分配了內存。因此,您可能必須自行釋放它,否則該內存將在程序運行的整個過程中分配。這被稱爲內存泄漏。

這裏是釋放內存的例子:

class Foo {}; 

Foo *getfoo() { 
    Foo *f = new Foo(); // Memory allocated here 
    return f; 
} 

int main() { 
    Foo *g = getfoo(); 
    // some code here 

    delete(g); // free the memory as "g" is no longer needed. 

    return 0; 
} 

在C++中是至關重要的,你要學會管理內存。否則,遲早你的應用程序將失敗。有一些編程模式對此有幫助,其中最受歡迎的編程模式是smart pointers

1

(的類Foo)一個對象的指針有些人喜歡這個名字前右加星號。我個人比較喜歡這種語法:

Foo * getfoo() { 
    return foo_object; 
} 

我認爲這顯示了一點更加清楚地表明Foo *只是類型的函數返回(就像它可能是int)。

1

這意味着函數返回一個指針。 什麼type那個指針是指針前面提到的。 這是指針將是類型FooFoo這裏是你說的是class該函數返回一個類對象指針