簡體   English   中英

C-構造函數,最好返回struct或指向struct的指針?

[英]C - Constructor, better to return struct or pointer to struct?

我目前正在用C語言制作RedBlackTree,但在為您的結構使用構造函數時,我仍然不明白哪一個更好/更理想。

struct RedBlackTree* RedBlackTree_new()
{
    struct RedBlackTree *tree = calloc(1, sizeof(struct RedBlackTree));
    if (tree == NULL)
        error(DS_MSG_OUT_OF_MEM);
    return tree 
}

VS。

struct RedBlackTree RedBlackTree_new()
{
    struct RedBlackTree tree;
    tree.root = NULL;
    tree.size = 0;
    return tree;
}

我的意思是,如果執行第二個選項,則必須不斷使用&將其作為指針傳遞到函數中,據我所知,我永遠無法銷毀它,直到程序結束(有人可以驗證這是否正確嗎?)。 例如,如果我的Tree具有destroy功能,那么,如果不是使用malloccalloc創建的,則無法釋放RedBlackTree結構分配的內存?

同樣在更一般的情況下,兩者的優缺點是什么? 我總是可以使用*從指針中檢索數據,而我總是可以使用&將數據變成指針,因此從某種意義上來說,它們幾乎可以完全互換。

真正的區別是對象的壽命。 通過動態分配( malloc / callocfree )在堆上分配的對象將calloc到顯式釋放為止。

相反,具有自動存儲功能的對象(如您的第二個示例)僅在聲明該對象的范圍內保留,因此必須將其復制到其他位置以使其保留。

因此,這應該可以幫助您選擇更適合特定情況的產品。

從效率的角度來看,動態分配更昂貴,並且需要其他間接訪問,但允許您傳遞指針,從而防止了數據被復制,因此在其他情況下可以更高效。 當對象很大且副本昂貴時。

首先,最好使用typedef。 更容易。

如果您動態創建對象,則需要自己釋放對象的每個成員。 或者,內存泄漏。

它花費更多。 所以我更喜歡指針! 忘了我以前說的話。 我只是夢游。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM