gpt4 book ai didi

c++ - 带有工厂设计尝试的段错误 unique_ptr

转载 作者:行者123 更新时间:2023-11-28 03:25:25 25 4
gpt4 key购买 nike

我在尝试使用 unique_ptr 创建派生类的实例时遇到了段错误。之前,我对七个派生类的每个实例都进行了编码,一个接一个,代码运行正常。

当前代码如下:

typedef std::unique_ptr<Comum> ComumPtr;

ComumPtr createInstance ( string dom, map<string, string> & config, map<string, string> & config_fields )
{
ComumPtr ptr; // initialized to nullptr.
if ( dom == "voice" ) {
ptr.reset ( new Voice (config, config_fields) );
// } else if ( dom == "account" ) { // FOR OTHER DERIVED CLASSES
// ptr.reset ( new Account (config, config_fields) );
}
return ptr;
}

// At main function:
for (vector<string>::const_iterator cit = for_domain.begin(); cit != for_domain.end(); ++cit) {
const char * section (cit->c_str());
string fsn = *cit + "_fields";
const char * fields_section_name (fsn.c_str());
const char * db_section ("Database");

map <string, string> domain_config = cfg.getSectionConfig (config_file.c_str(), section);
map <string, string> domain_config_fields = cfg.getSectionConfig (config_file.c_str(), fields_section_name);
map <string, string> database_config = cfg.getSectionConfig (config_file.c_str(), db_section);

std::unique_ptr<Comum> domain = createInstance(*cit, domain_config, domain_config_fields);

domain->readDatabaseFields (database_config); // <- segmentation fault

您认为这会导致段错误吗?

最佳答案

函数createInstance有机会返回nullptr,需要检查指针是否有效:

if (domain.get())
{
domain->readDatabaseFields (database_config);
}

关于c++ - 带有工厂设计尝试的段错误 unique_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14181522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com