繁体   English   中英

我需要在此类的析构函数中编写任何内容吗?

[英]Do I need to write anything in the destructor of this class?

谢谢大家! 现在我改变了逻辑。 因为如果我包含指向自身的相同指针,它将创建无限循环。 因此,对于此修订版,我需要编写析构函数吗?

#include <stdio.h>
#include <stdlib.h>
#include <tr1/array>

using namespace std;
class Graphnode {

public:
    std::tr1::array<int, 16> state;
    int x;
    int depth;
    Graphnode(std::tr1::array<int, 16>,int,int);
    Graphnode();
    //~Graphnode();

};
Graphnode::Graphnode()
{
    int i=0;
    for(i=0;i<16;i++)
    {
       state[i] = 0;
    }
    x = 0;
    depth = 0;
}
Graphnode::Graphnode(std::tr1::array<int, 16> _state,int _x,int _d)
{   
    int i=0;
    for(i=0;i<16;i++)
    {
       state[i] = _state[i];
    }
    x = _x;
    depth = _d;
}
/*Graphnode::~Graphnode()
{
}*/

您没有在堆上分配任何东西,因此在对象被销毁时不需要清理任何东西。 编译器会自动为您生成一个析构函数,并且IIRC会执行与您注释掉的空对象基本上相同的操作,尽管有一些明显的不同。 关于空析构函数和编译器生成的析构函数之间的区别, 这是一个很好的问题/答案。

当您尝试创建一个Graphnode时,您的代码将创建一个无限循环

您可以尝试为子Graphnode创建一个特定的构造函数,以便在该构造函数中不创建更多的Graphnode。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM