gpt4 book ai didi

c++ - 我应该从静态成员方法返回什么类型的指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:39 25 4
gpt4 key购买 nike

我主要来自 Java 世界,但最近一直在编写大量 C++,但仍然不太了解如何使用指针或在何处使用哪种类型的指针。我将简要举例说明我的案例,并记住我真正要问的问题是“我应该使用哪种类型的指针以及为什么?”。

与我的代码完美平行的是考虑链节的类。每个链接都有一个父链接,除了根链接只能有一个。

// Link.hpp
class Link
{
public:
Link(const std::string &linkName, Link *parentLink);
Link(const std::string &linkNam);
static Link* createRootLink(const std::string &linkName);
static Link* getRootLink();

private:
static Link *rootLink;
Link *parentLink;
}

//Link.cpp
Link* Link::rootLink = Link::createRootLink("root");

Link* Link::createRootLink(const std::string &linkName);
{
// Is raw pointer correct here or should I
// use a different pointer type, i.e. smart_pointer,
// shared_pointer, etc?
Link *rootLink = new Link(linkName);
return rootLink;
}

Link* getRootLink()
{
return rootLink;
}

Link::Link(const std::string &linkName)
{
this->linkName = linkName;
this->parentLink = NULL; // Root link has no parent link.
}

Link::Link(const std::string &linkName, Link *parentLink)
{
this->linkName = linkName;
this->parentLink = parentLink;
}

希望这已经足够清楚了。我在 Java 中这类事情很简单,但在 C++ 中我不确定如何管理对静态对象指针的需求。在此先感谢您的帮助!

最佳答案

我使用它(因为它在 header 中是内联的):

class Link
{
public:
Link(const std::string &linkName, Link *parentLink);
Link(const std::string &linkNam);
static Link* getRootLink() {
static std::unique_ptr<Link> root(new Link("root"));
return root.get();
}
};

在单线程环境中,这很好,在多线程环境中,您需要防止多个线程首次同时访问 getRootLink(有一个保护模式可以启用此功能。 )

请注意 unique_ptr 允许解构器在程序结束时运行。如果您知道不需要解构函数,那么一个普通的旧指针也可以。

关于c++ - 我应该从静态成员方法返回什么类型的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32096462/

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