在我的项目中,我有两个类,EarleyParser
类:
class EarleyParser
{
public:
EarleyParser();
virtual ~EarleyParser();
void initialize( string filePath, bool probabilityParse );
private:
bool probabilityParser;
typedef unordered_map< string, list<Production> > productionHashTable;
productionHashTable earlyHashTable;
};
和Production
班级:
class Production
{
public:
Production();
Production( float productionProbability, int productionLength, vector< string >* productionContent );
Production( const Production& copy_me );
virtual ~Production();
float getProductionProbability();
int getProductionLength();
vector< string >* getProductionContent();
private:
float productionProbability;
int productionLength;
vector< string >* productionContent;
void setProductionProbability( float productionProbability );
void setProductionLength( int productionLength );
void setProductionContent( vector< string >* productionContent );
};
正如你在上面看到的,这个EarlyParser
类有一个成员元素是一个unordered_map
,它的关键元素是一个字符串,值是类list
中元素的一个Production
。
代码可以正常工作,并且unordered_map
和list
被填充,但是在调用标准析构函数类时EarleyParser
出现分段错误。
据我了解,默认析构函数EarleyParser
应该调用的默认析构函数unordered_map
应该调用其中一个list
应该调用其每个元素的Production
类的默认析构函数,如下所示:
Production::~Production()
{
if( this->productionContent != NULL )
delete this->productionContent; <- line 44
}
使用 Valgrind 和 GDB 进行回溯并没有给我太多帮助来解决分段错误,这在EarleyParser.cpp
析构函数的第 44 行中给出。
我应该实现析构函数类,还是默认析构函数可以?关于可能导致分段错误的任何想法?
添加的副本构造函数
Production::Production( const Production& copy_me )
{
if( this->productionContent != NULL )
this->productionContent = NULL;
this->setProductionProbability( copy_me.productionProbability );
this->setProductionLength( copy_me.productionLength );
this->setProductionContent( copy_me.productionContent );
}