[英]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
}
struct RedBlackTree RedBlackTree_new()
{
struct RedBlackTree tree;
tree.root = NULL;
tree.size = 0;
return tree;
}
我的意思是,如果執行第二個選項,則必須不斷使用&
將其作為指針傳遞到函數中,據我所知,我永遠無法銷毀它,直到程序結束(有人可以驗證這是否正確嗎?)。 例如,如果我的Tree具有destroy
功能,那么,如果不是使用malloc
或calloc
創建的,則無法釋放RedBlackTree
結構分配的內存?
同樣在更一般的情況下,兩者的優缺點是什么? 我總是可以使用*
從指針中檢索數據,而我總是可以使用&
將數據變成指針,因此從某種意義上來說,它們幾乎可以完全互換。
真正的區別是對象的壽命。 通過動態分配( malloc
/ calloc
和free
)在堆上分配的對象將calloc
到顯式釋放為止。
相反,具有自動存儲功能的對象(如您的第二個示例)僅在聲明該對象的范圍內保留,因此必須將其復制到其他位置以使其保留。
因此,這應該可以幫助您選擇更適合特定情況的產品。
從效率的角度來看,動態分配更昂貴,並且需要其他間接訪問,但允許您傳遞指針,從而防止了數據被復制,因此在其他情況下可以更高效。 當對象很大且副本昂貴時。
首先,最好使用typedef。 更容易。
如果您動態創建對象,則需要自己釋放對象的每個成員。 或者,內存泄漏。
它花費更多。 所以我更喜歡指針! 忘了我以前說的話。 我只是夢游。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.