现在我正在开发一个搜索节点程序。我的代码在下面,我实际上想要搜索特定的子节点。为了避免对象切片,我使用了一个指针,但指针可能是null_ptr。所以我应该如何避免这个问题。我不确定它的问题?并避免新实例属性,父obj在main()中的实例应该声明为自C++ 11以来支持的shared_ptr?避免对象切片并使用shared_ptr
#include <iostream>
using namespace std;
class Parent {
public:
Parent() { name = "Parent"; }
virtual void print() {
cout << "Parent::print()" << endl;
}
string name;
};
class Child1 : public Parent {
public:
Child1() { name = "Child1"; }
virtual void print() override{
cout << "Child1::print()" << endl;
}
};
class Child2 : public Parent {
public:
Child2() { name = "Child2"; }
virtual void print() override{
cout << "Child2::print()" << endl;
}
};
class Manager {
public:
void getChild(int i, Parent* obj) {
if(i==0) {
cout << "sest child1" << endl;
obj = (&child1);
} else {
cout << "sest child2" << endl;
obj = (&child2);
}
}
Child1 child1;
Child2 child2;
};
int main()
{
// object slicing?
// Parent obj;
// Manager manager;
// manager.getChild(1, obj);
// obj.print();
Parent* obj;
Manager manager;
manager.getChild(1, obj);
obj->print();
}
我的代码因为分段错误而中断。
$ a.out D
sest child2
[1] 5457 segmentation fault ./work/derived/a.out D
您正在通过值'getChild'将指针'obj'传递给'getChild'。这不会影响'main'范围内'obj'的值,它仍然未初始化。它与对象切片无关。 **阅读你的编译器警告**。 –
您需要将指针的地址传递给'getChild',即指向指针的指针。 –