小编Har*_*and的帖子

这是在现代C++糟糕实践中使用原始指针吗?

我想要保存一个没有对象切片的Base类实例的向量(这样我也可以存储没有问题的Base的子实例),同时保持多态行为,而不是通过复制值而是通过引用添加到列表中.

请考虑以下源文件:

#include <iostream>
#include <string>
#include <vector>
#include <memory>

class Entity
{
public:
    Entity(){this->edited = false;}
    virtual std::string name() = 0;
    bool edited;
};

class Player: public Entity
{
public:
    Player(): Entity(){}
    std::string name(){return "player";}
};

int main()
{
    std::vector<Entity*> entities;
    Player p;
    entities.push_back(&p);
    entities.at(0)->edited = true;
    Entity* ent = entities.at(0);
    std::cout << "ent = " << ent->name() << ", edited = " << ent->edited << ".\n";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我获得以下输出:

ent = player, edited = 1.
Run Code Online (Sandbox Code Playgroud)

当输出显示(通过打印出"播放器"并显示"已编辑"中的更改)时,由于原始指针而保持多态行为,并且我能够毫无问题地编辑列表成员.

澄清我在问什么:我可以使用std …

c++ polymorphism smart-pointers stdvector c++11

6
推荐指数
1
解决办法
1552
查看次数

标签 统计

c++ ×1

c++11 ×1

polymorphism ×1

smart-pointers ×1

stdvector ×1