无法将类构造函数中新创建的对象复制到 C++ 中的向量成员

Can't copy newly created objects in the Class constructor to its vector member in C++

本文关键字:复制 对象 成员 向量 C++ 构造函数 新创建 创建      更新时间:2023-10-16

在类构造函数中,我正在初始化其他对象并将这些对象推向我的类向量成员。据我了解,矢量创建了对象的副本并存储它,以免它超出范围。但是,当验证其他类功能中的对象时,它们不再初始化。这是解释行为的示例代码:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
class Square {
    private:
    int size_ = 0;
    int colour_ = 0;
    public:
    Square(){
        size_ = 0;
        colour_ = 0;
    }
    void init(int size, int colour) {
        size_ = size;
        colour_ = colour;
    }
    int get_size() { return size_; }
};

class SetSquares {
    private:
    std::vector<Square> squares_;
    int number_;
    public:
    SetSquares(): number_(0) {}
    void init(int num) {
        number_ = num;
        squares_.clear();
        squares_.resize(num);
        for (int i=0; i < num; i++) {
            Square square;
            square.init(i, i);
            squares_.push_back(square);
        }
    }
    void sample(int i) {
        if (i >= number_) { return; }
        std::cout << "Square size is: " << squares_[i].get_size() <<       std::endl;
    }
};
int main()
{
    SetSquares set_of_squares;
    set_of_squares.init(7);
    set_of_squares.sample(4);
    return 0;
}

resize(n(将在向量中创建n默认的构造元素,而push_back将在这些n元素之后附加新元素。按照评论中的建议使用储备金和push_back或调整大小和索引运算符。