gpt4 book ai didi

c++ - 我们应该在通过引用传递之前取消引用指针吗?

转载 作者:行者123 更新时间:2023-11-30 00:46:51 26 4
gpt4 key购买 nike

多年前,我从我的老师那里学习了C++类(class)。他展示了如何在 C++ 中使用指针和链表:[语法不准确]

//Declaration
Nodetype *head = new NodeType()...

//Call insertnode method:
InsertNode(head, val1);

//The InsertNode function
void InsertNode(NodeType& head, int val1){}

正如您在上面看到的,我们没有取消对“head”的引用。我们使用“InsertNode(head, val1);”而不是“InsertNode(*head, val1);”

然而昨天,当我从微软网站学习智能指针时:他们使用“ProcessLargeObject(*pLarge);”而不是“ProcessLargeObject(pLarge);”。

我们应该在通过引用传递之前取消对指针的引用吗?或者我们应该只传递指针而不取消引用?请指教

class LargeObject
{
public:
void DoSomething(){}
};

void ProcessLargeObject(const LargeObject& lo){}
void SmartPointerDemo()
{
// Create the object and pass it to a smart pointer
std::unique_ptr<LargeObject> pLarge(new LargeObject());

//Call a method on the object
pLarge->DoSomething();

// Pass a reference to a method.
ProcessLargeObject(*pLarge);

} //pLarge is deleted automatically when function block goes out of scope

.

最佳答案

As you can see above, we didn't de-reference "head". We use "InsertNode(head, val1);" instead of "InsertNode(*head, val1);"

那是一个错误,所以你的问题的前提被打破了。您一定是记错了,或者可能是您的类(class) Material 中的错字。或者,也许,您的教授只是误会了。

必须取消引用head,因为InsertNode 接受NodeType(通过引用),而不是节点类型*

总的来说,我可以说你将如何使用链表完全取决于实现。在 C++ 中实现链表类型没有“唯一方法”。您必须阅读所用类的文档以了解如何正确使用它。

FWIW,在实际生产代码中,您通常会使用 std::list 并完成它。

关于c++ - 我们应该在通过引用传递之前取消引用指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37089374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com