繁体   English   中英

C++ 调用成员复制构造函数时

[英]C++ When member copy constructors are called

给定代码

#include <iostream>
#include <vector>


class Entity {
public:
    Entity(const int x, const int y) :
        x(x), y(y)
    {
        this->entities.push_back(*this);
    }

    int x, y;
    std::vector<Entity> entities;
};


int main() {

    auto p = Entity(10, 20);

    std::cout << p.entities.size() << '\n';
    std::cout << p.x << ' ' << p.y << "\n\n";

    std::cout << p.entities[0].entities.size() << '\n';
    std::cout << p.entities[0].x << ' ' << p.entities[0].y << '\n';
    
    return 0;
}

当 entity.push_back 被调用时,Entity 应该被复制到向量中。 复制时,所有成员都应按以下顺序调用其复制构造函数:(x,y,实体)。 问题出在实体构造函数中,“std::vector”构造函数应该调用“Entity”构造函数,该构造函数将再次调用“std::vector”构造函数,导致无限循环。

但根据output:

1
10 20

0
10 20

不调用“std::vector”复制构造函数。

我的错误在哪里? 我忘记了一些实现细节?

“std::vector”构造函数应该调用“Entity”构造函数,该构造函数将再次调用“std::vector”构造函数,导致无限循环

没有。

std::vector<Entity>复制构造函数将调用Entity复制构造函数。

Entity复制构造函数复制当前存在的成员向量(空)。 它不会运行将某些内容push_back送到向量的二元素Entity构造函数中的代码。

您在构造函数中复制自己,这通常是一种不好的做法,因为 object 尚未完全构造。 在这种情况下,当您调用push_back时,向量仍然是空的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM