C ++相当新,所以这可能是一个非常愚蠢的问题。我需要成员函数cube_normals
和read_models()
访问proc_models()
指针,每次调用read_models()
时都必须初始化指针。
在我可以做的成员函数中:
PointCloud<A>::Ptr cube_normals (new PointCloud<A>);
我可以将指针传递给另一个函数但是我使用了12个这样的指针,它可能不是解决这个问题最干净的方法。
这是代码段。提前致谢!
class preproc
{
public:
preproc();
~preproc();
PointCloud<A>::Ptr cube_normals;
void read_models();
void proc_models();
private:
ros::NodeHandle nh;
ros::NodeHandle nh_priv;
};
答案 0 :(得分:1)
问题
如果在成员函数中有这个陈述:
PointCloud<A>::Ptr cube_normals (new PointCloud<A>);
您将创建一个本地变量cube_normals
,它将隐藏具有相同名称的类成员。
解决方案
如果目标是每次拨打read_models()
时创建一个新的空对象,您可以选择分配。
问题在于以下内容不一定有效,具体取决于Ptr
的定义方式:
cube_normals = new PointCloud<A>; // but what do you do with the old pointer ??
假设你的smartpointer类是这样的:
template <class T>
class PointCloud {
public:
using Ptr = shared_ptr<T>;
};
然后你可以选择一个简单的:
cube_normals = PointCloud<A>::Ptr(new A);
这个compiles nicely,尽管根据你正在使用的智能指针的类型使用make_shared或make_unique会更好。
我的建议是在PointCloud
上工作,以确保正确的智能指针界面,包括将指针放在null上,然后创建指向新对象的指针。