使共享指针指向新实例
Making shared pointer point to new instance
所以我有一个抽象基类BaseScreen
和一个子类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++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 根据参数创建派生类的新实例
- 我们可以在没有新实例化的情况下声明一个抽象方法来返回抽象超类中的子类对象吗
- 基于现有实例创建类的新实例
- 将unordered_map的新实例插入到unordered_map中
- 如何自动生成结构的新实例
- 在C 中,是否有一种(新的)方法来测试类是否在模板中具有虚拟破坏者而无需实例化实例
- 如何使递归函数在进入下一级循环之前读取每个新实例
- 为什么方法应该返回新实例,而不是修改实例本身
- C 函数中的新实例
- 正确的编码:返回类的新实例时
- 如果我在一个类中有一个静态属性,并创建该类的许多新实例
- 在 C 中声明结构的新实例
- 如何检查是否存在单例实例,如果没有,则不创建新实例?
- malloc是否创建该类的新实例
- 返回矢量的新实例
- "错误:需要类型"创建新实例
- 如何防止其他人在堆上创建类的新实例
- 使用模板创建类的新实例,不知道如何处理错误
- 尝试使用模板创建类的新实例,意外错误