考虑以下 C 代码:
<code class="cpp">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; } };</code>
在一个单独的类中:
<code class="cpp">void some_method() { vector<Instruction> v; Instruction* i = new Add(1,2,3) v.push_back(*i); }</code>
在另一个类中:
<code class="cpp">void some_other_method() { Instruction ins = v.back(); ins.execute(); }</code>
这些类共享指令向量。但是,我们遇到了有关执行函数的问题。它会保留其 Add 类型吗?
不幸的是,它不会。矢量存储值,而不是引用。这意味着指令对象将在某个时刻被复制,从而导致一种称为“对象切片”的现象。
要解决此问题,请考虑使用向量或者,更有效地,向量 >.
以上是在 C 中使用'向量”时是否会发生对象切片?的详细内容。更多信息请关注PHP中文网其他相关文章!