gpt4 book ai didi

c++ - 使共享指针指向新实例

转载 作者:行者123 更新时间:2023-11-30 04:02:23 25 4
gpt4 key购买 nike

所以我有一个抽象基类 BaseScreen和一个 child 类MainMenu (和其他一些)。然后我创建一个智能指针 std::shared_ptr<BaseScreen> CurrentScreen .但是,当我尝试做这样的事情时:

CurrentScreen = std::make_shared<rpg::MainMenu>(new rpg::MainMenu());

我收到错误 C2664。我对智能指针还很陌生,我试图研究为什么会出现此错误,但找不到与此错误和智能指针相关的任何信息。 (虽然我对错误本身发生的原因有一个大概的了解。)

这里是代码以备不时之需:

class BaseScreen : public sf::Drawable
{
public:
virtual void HandleEvents(sf::RenderWindow& screen, sf::Event events) = 0;

BaseScreen(){}
virtual ~BaseScreen(){}

};

...

class MainMenu : public BaseScreen
{
private:
ButtonComponent myStartButton;

public:

virtual void HandleEvents(sf::RenderWindow& screen, sf::Event events){}

MainMenu(){}
~MainMenu(){}

private:
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
{
/* ... */
}
};

...

class Screens : public sf::Drawable
{
private:
std::shared_ptr<BaseScreen> myScreen;

public:
Screens()
{
//error C2664
myScreen = std::make_shared<rpg::MainMenu>(new rpg::MainMenu());
}
~Screens(){}

private:
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
{
/* ... */
}
};

最佳答案

std::make_shared 构造对象本身。您应该传递给它的参数是您想要传递给对象的构造函数的参数。如果您希望对象默认构造,则:

CurrentScreen = std::make_shared<rpg::MainMenu>();

如果您将 new rpg::MainMenu() 传递给 std::make_shared,那么它会尝试传递此指针---rpg 类型: :MainMenu*---rpg::MainMenu 的构造函数,这实际上没有意义。

关于c++ - 使共享指针指向新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25100214/

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