C++ 复制构造函数会丢失某些属性

C++ 复制构造函数会丢失某些属性,c++,copy-constructor,C++,Copy Constructor,我有一个类块的副本构造函数 Block::Block(const Block& p_block):Drawable(p_block) { } 它继承自类Drawable Drawable::Drawable(const Drawable& p_drawable) { sprite = p_drawable.sprite; texture = p_drawable.texture; x = p_drawable.x; y = p_drawable.

我有一个类
块的副本构造函数

Block::Block(const Block& p_block):Drawable(p_block) {
}
它继承自类
Drawable

Drawable::Drawable(const Drawable& p_drawable) {
    sprite = p_drawable.sprite;
    texture = p_drawable.texture;
    x = p_drawable.x;
    y = p_drawable.y;
}
我使用指针来存储对象,但尝试切换到不使用指针,现在精灵和纹理丢失了。我很确定我对引用/指针的使用是错误的

绘制方法:

void Room::draw(sf::RenderWindow &p_window) {
    for(auto& block : blocks) {
        block.draw(p_window);
    }
...
}
可以包含任何其他必要的代码。只是想知道我在复制构造函数中是否做错了什么,或者我是否真的应该使用指针


我也用它来处理碰撞,不确定这里是否有什么东西会引起问题

struct sortBlocksByDistance {
    Drawable *drawable;
    sortBlocksByDistance(Drawable* p_drawable) {
        this->drawable = p_drawable;
    }
    bool operator () (Block* a, Block* b) {
        float adx = a->x - drawable->x,
        ady = a->y - drawable->y,
        adist = adx * adx + ady * ady;

        float bdx = b->x - drawable->x,
        bdy = b->y - drawable->y,
        bdist = bdx * bdx + bdy * bdy;

        return adist < bdist;
    }
};

std::vector<Block*> Room::detectCollisions(Drawable *p_drawable) {
    std::vector<Block*> hitBlocks;
    for(auto& block : blocks) {
        if(block.collidesWith(p_drawable)) {
            hitBlocks.push_back(&block);
        }
    }
    std::sort(hitBlocks.begin(), hitBlocks.end(), sortBlocksByDistance(p_drawable));
    return hitBlocks;
};

std::vector<Block*> collisions = detectCollisions(player);
player->solveCollisions(collisions);

void Drawable::solveCollisions(std::vector<Block*> p_blocks) {
    while(p_blocks.size()) {
        Block &block = *p_blocks.front();
        // x/y manipulation

        // pop front
        p_blocks.front() = std::move(p_blocks.back());
        p_blocks.pop_back();
    }
};
struct sortBlocksByDistance{
可拉伸*可拉伸;
分拣锁液压距离(可牵引*p_可牵引){
此->可绘制=p_可绘制;
}
布尔运算符()(块*a,块*b){
浮动adx=a->x-可拉伸->x,
ady=a->y-可拉伸->y,
adist=adx*adx+ady*ady;
浮动bdx=b->x-可绘制->x,
bdy=b->y-可拉伸->y,
bdist=bdx*bdx+bdy*bdy;
返回adist解决碰撞(碰撞);
void Drawable::solveCollisions(标准::向量p_块){
while(p_blocks.size()){
Block&Block=*p_blocks.front();
//x/y操纵
//流行前沿
p_blocks.front()=std::move(p_blocks.back());
p_blocks.pop_back();
}
};

复制构造函数看起来不错。您是否确保正确实施了该计划?这也是一个常见问题。
std::vector
更好的应该是
std::vector
std::vector
@πάνταῥεῖ 或者更好的方法是;)