"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > C++에서 '벡터'를 사용할 때 객체 슬라이싱이 발생합니까?

C++에서 '벡터'를 사용할 때 객체 슬라이싱이 발생합니까?

2024년 11월 12일에 게시됨
검색:217

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();
}

이 클래스는 명령어 벡터를 공유합니다. 그러나 실행 기능과 관련하여 우려 사항이 있습니다. Add 유형이 유지됩니까?

안타깝게도 유지되지 않습니다. vector은 참조가 아닌 값을 저장합니다. 이는 Instruction 객체가 특정 시점에 복사되어 "객체 슬라이싱"이라는 현상이 발생함을 의미합니다.

이 문제를 해결하려면 vector 또는 보다 효과적으로 vector >.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3