M.M*_*M.M 5 c++ poco-libraries
我注意到许多Poco类都有一个受保护的析构函数.这使得编码更加烦人.例如,这里是我的一些代码:
struct W2: Poco::Util::WinRegistryConfiguration
{
typedef Poco::Util::WinRegistryConfiguration inherited;
using inherited::inherited;
};
std::string get_documents_folder()
{
W2 regc { "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders" };
return regc.getString("Personal", "");
}
Run Code Online (Sandbox Code Playgroud)
当然,如果我可以取消W2并且只是制造regc类型会更简单WinRegistryConfiguration.但由于受保护的析构函数,这是不可能的.
我意识到可以使用它Poco::AutoPtr,但是new当自动分配应该正常工作时,通过动态分配浪费资源.
我的问题是:这是什么原因,我忽略了什么?
正如已经回答的,Poco::RefCountedObject 有受保护的析构函数,因此所有继承自它的类都不能在堆栈上创建。原因是因为当引用计数达到零时它们会删除自己,因此在堆栈上创建它们会导致未定义的行为 - 它们主要是与 Poco::AutoPtr 一起使用,但这不是强制性的 - 您也可以手动引用计数,使用重复()和释放()。
查看您的代码,您可能正在寻找WinRegistryKey,您可以像这样使用它:
std::string get_documents_folder()
{
Poco::Util::WinRegistryKey regKey("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders");
return regKey.getString("Personal", "");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
360 次 |
| 最近记录: |