0
我知道,在C++中編寫(動態)插件時,插件分配的內存也應該由插件釋放。一般來說,這同樣適用於DLL。以下像QString這樣的類可以安全地跨DLL邊界傳輸,假設使用相同的編譯器?
假設:可執行文件,所有插件和所有的依賴關係(如QT)總是會以相同的編譯器構建
由於類,如QString
使用機制,例如淺拷貝,因此內部數據指針:
如果插件通過(淺)副本返回本地定義的QString
到可執行文件,並且副本超出了可執行文件的範圍,那麼是否會在錯誤的過程中釋放內存?
例如代碼:
// Defined in a DLL which is loaded at runtime
class SamplePlugin : IPlugin
{
public:
QString getSomeStringData() const override
{
return "Hello World"
}
}
// Defined in the executable
void Test(PluginManager* pluginManager)
{
for(auto plugin : pluginManager->loadPlugins())
{
auto stringData = plugin->getSomeStringData();
doSomethingWith(stringData)
} // stringData goes out of scope here - is this a problem?
}