«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Происходит ли нарезка объектов при использовании вектора в C++?

Происходит ли нарезка объектов при использовании вектора в C++?

Опубликовано 12 ноября 2024 г.
Просматривать:426

Does Object Slicing Occur When Using a `vector` in C  ?

Векторы и полиморфизм в C: нарезка объектов

Рассмотрим следующий код C:

class Instruction {
public:
    virtual void execute() { }
};

class Add: public Instruction {
private:
    int a;
    int b;
    int c;
public:
    Add(int x, int y, int z) {a=x;b=y;c=z;}
    void execute() { a = b   c;  }
};

В отдельном классе:

void some_method() {
    vector v;
    Instruction* i = new Add(1,2,3)
    v.push_back(*i);
}

И в другом классе:

void some_other_method() {
    Instruction ins = v.back();
    ins.execute();
}

Эти классы используют общий вектор инструкций. Однако мы сталкиваемся с проблемой, связанной с функцией выполнения. Сохранит ли он тип «Добавить»?

К сожалению, нет. Vector хранит значения, а не ссылки. Это означает, что в какой-то момент объект инструкции будет скопирован, что приведет к явлению, называемому «нарезкой объекта».

Чтобы решить эту проблему, рассмотрите возможность использования вектора или, что более эффективно, вектора >.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3