gpt4 book ai didi

qgis - 指向派生类对象的指针

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

以下问题:我想构建一个函数,它向我返回一个指向抽象类派生对象的指针。我认为,当函数离开时内存被释放,因为我得到一个分配错误。但是我不能把对象还回去,因为这个类是抽象的。在我决定的函数中,对象将具有哪个派生类。我该如何解决这个问题?有什么想法吗?

QgsSymbolV2* QGISFunc::ReadClassSymbolsXML(QString FeatureType, QXmlStreamReader &reader)
{
QgsMarkerSymbolV2* p_mlmSymbol=0;
try
{
QgsLineSymbolV2 mllSymbol;
QgsFillSymbolV2 mlfSymbol;
QgsMarkerSymbolV2 mlmSymbol;
...
return &mlmSymbol; // alloc error

最佳答案

您正在返回具有自动存储功能的变量地址。当函数返回时,该对象被销毁。解决方案是在堆上分配对象。为此,我建议使用智能指针( unique_ptrshared_ptrmake_shared<>() 结合使用)并返回智能指针。

std::shared_ptr<QgsSymbolV2> QGISFunc::ReadClassSymbolsXML(
QString FeatureType,
QXmlStreamReader &reader
)
{
try
{
...
std::shared_ptr<QgsSymbolV2> spObj = make_shared<QgsMarkerSymbolV2>();
...
return spObj;
}
...
}

关于qgis - 指向派生类对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14386709/

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