首先,我很抱歉这个愚蠢的问题,但我是C ++世界的新手,我已经习惯了Java和Python。

我想问一下构造函数应该如何在C ++中工作。 我希望如果我为我的实例分配一些值或子对象,那么它不会被另一个构造函数删除?

特别是我的问题如下:

我有类看起来像这样的类:

class Tree {
   Node * const first;
   Node * last;
   std::vector<Node *> nodesVector;
   unsigned int nodes;

public:
   Tree(Node * const root) : first(root){
       nodes = 1;
       nodesVector.push_back(root);
   }
}

然后我有类RRTStar,如下所示:

class RRTStar {
   Tree * tree;
   Node * root;
   const double RADIUS;

public:
   RRTStar(const Point & point, double radius) : RADIUS(radius){
       Node n;
       n.point = point;
       unsigned int zero = 0;
       n.id = zero;
       n.cost = 0;
       n.parent = NULL;
       this->root = &n;
       Tree t = Tree(this->root);
       this->tree = &t;
   }
}

正如您所看到的那样,总是会从Tree的构造函数向Vector中添加一个值,该构造函数是从RRTStar构造函数调用的。 当我进行调试时,我可以看到确实已经将Node n添加到向量中,但不幸的是,它在RRTStar构造函数完成后以某种方式被删除。

所以我的问题是我做错了那个向量还是删除了树实例的内容?

===============>>#1 票数:2 已采纳

这两行看起来最可疑:

   this->root = &n;
   this->tree = &t;

它们将获取局部变量的地址,该变量将在构造函数完成时被销毁。 在构造函数之外使用那些指针的任何使用都是UB。

您需要使用new动态分配它们,并确保析构函数,复制构造函数和赋值运算符正确处理它们。

  ask by ziky90 translate from so

未解决问题?本站智能推荐:

3回复

C ++,需要帮助理解使用指针的向量类中的一些构造函数和函数

问候全部; 我必须开发一个C ++类库,其中包含一系列用于科学计算的数值技术。 该库应该实现Vector类(使用指针),其中一些基本功能在头文件“Vector.h”中声明。 我是C ++的初学者,我对于理解上面代码中的一些构造函数和函数有些困惑。 我的问题是: 1-以
1回复

将Vector作为参数传递给另一个类构造函数C ++

我一直在尝试使用以下行将向量传递给另一个类的构造函数:(下面的代码行在Lexer.cpp类中) 其中,toks是Token类型的向量( vector<Token> toks; ),其中Token是Lexer.h类中的结构。 我想将此向量传递给的构造函数如下: 但
1回复

在类构造函数中向向量添加值时的变量作用域

我有一个级别类和一个Enemy_control类,该类基于将Enemys作为值的向量。 在我的关卡构造函数中,我有: 敌人是Enemy_control类型的变量。 这些语句抱怨级别,敌人控制和敌人的某些析构函数问题后,我的程序崩溃。 敌人构造函数: 敌人:: Enemy
5回复

在类构造函数中设置std :: vector,使用元素构造函数的不同值

我有一个非常简单的构造函数的类: mystream实例有一个唯一的id,它对应于它在管理类的向量中的位置: 如何构造向量并使用索引的升序值初始化其元素?
1回复

尝试使用vector初始化类时出错 在构造函数中

考虑以下代码: 为什么最后一行不能编译? 错误:使用不同类型重新定义了“数组”:“ DummyClass”与“ vector”
1回复

在C ++中相同类型的向量中使用类的构造函数

考虑: 然后,定义相同类型的向量 可以吗? 或:(在未定义向量大小的情况下) 如果不允许这样做,初始化类实例并将其存储在向量中而不使用指针的替代方法是什么? 有这样的事吗?
3回复

用户定义的类的构造函数不使用向量

我的问题很简单,类的构造函数不使用std::vector 。 该程序没有输出任何内容,即使它应该输出my_class constructed 。 然后我假设构造函数适用于vector每个元素,所以我这样做: 此代码输出: 这种结构是因为my_class对象而发生的,而不
2回复

构造函数中的C ++ std :: vector

我正在尝试编写以下复合类的有效实现: 我的问题是关于类的构造函数和实例化,特别是对象Vec。 在那一刻,我使用下面概述的相当粗略的实现。 我的实现是内存效率。 我几乎是C ++的新手,所以我不确定我在这里有最佳解决方案...... 我使用多态来在向量中存储不同的派生类,例如
2回复

向量调用构造函数的奇怪问题

MyObject在内部创建一个名为“存储”的成员,该成员是使用堆上的MyType的数组。 但是使用上面的代码行,ObjectList中的每个项目都有指向相同内存位置的“存储”(实际上是共享存储)。 当我使用以下命令在堆栈上手动分配列表时,不会发生此问题 当我在上面的行中声明
1回复

我使用了一个向量来创建类对象列表。 初始化向量时如何使用参数调用构造函数? [关闭]

已关闭 。 这个问题需要细节或明确性。 它当前不接受答案。 了解更多 。 想改善这个问题吗