我有以下 C++ 代码:
vtkNew _surf;
_surf->ShallowCopy(surf);
vtkIdType cellId = Get_ClosestCellId(_surf, seedxyz);
_surf->DeleteCell(cellId);
_surf->RemoveDeletedCells();
创建
_surf
后,我们将其指定为ShallowCopy
的surf
,然后通过调用seedxyz
删除最接近
_surf->DeleteCell
的单元格
我想,如果我像这样
ShallowCopy
,由于_surf
和surf
共享同一个指针,对_surf
所做的修改也会反映在surf
中。
但是,如果以 vtp 格式输出两者,
_surf
会被修改,但 surf
不会显示更改。这是为什么?
如果我们知道该对象
surf
,我们可以检查文档来确定。
我做了这个非常简单的例子。
#include <stdio.h>
class A{
public:
float* pos;
A* ShallowCopy(){
A* a = new A();
a->pos = pos;
return a;
}
};
int main(int argc, char** args){
A* surf = new A();
float* pos = new float[1];
pos[0] = 5;
surf->pos = pos;
A* b = surf->ShallowCopy();
printf(" startt: %f\n", surf->pos[0]);
b->pos[0] = 10;
printf(" first: %f\n", surf->pos[0]);
float* other = new float[1];
other[0] = 20;
b->pos = other;
printf(" after: %f\n", surf->pos[0]);
}
输出为:
起始:5.000000
第一:10.000000
之后:10.000000
其想法是,浅拷贝使用相同的支持数据
pos
,因此 pos
的更改会反映在两个副本中。这两个对象都有自己的指向 pos
的指针,因此当您 b->pos = other
时,它不会反映在 surf
中