最近在做OGRMultiPolygon相關開發的時候,遇到了新建OGRMultiPolygon對象無法正確釋放的問題,后來找到示例代碼,發現該對象不能直接new,以下為錯誤代碼和正確代碼的示例。
/*********error code*********
OGRMultiPolygon* pmp = new OGRMultiPolygon;
delete pmp;
pmp = nullptr;
*********error code*********/
//藍色多邊形
char* szWKT_1 = "POLYGON ((113.885 22.6815, 113.9425 22.6585, 113.91 22.7, 113.885 22.6815))";
//橙色多邊形
char* szWKT_2 = "POLYGON ((113.91 22.7, 113.9425 22.6585, 113.9675 22.689, 113.91 22.7))";
OGRGeometry* pGeom_1 = NULL;
OGRGeometry* pGeom_2 = NULL;
OGRGeometryFactory::createFromWkt(&szWKT_1, NULL, &pGeom_1);
OGRGeometryFactory::createFromWkt(&szWKT_2, NULL, &pGeom_2);
OGRMultiPolygon* pMultiPolygon = (OGRMultiPolygon*)OGRGeometryFactory::createGeometry(wkbMultiPolygon);
pMultiPolygon->addGeometryDirectly(pGeom_1);
pMultiPolygon->addGeometryDirectly(pGeom_2);
//用Buffer替代Union,緩沖距離設置為0
//pUnion為紫色多邊形
OGRGeometry* pUnion = pMultiPolygon->Buffer(0);
delete pMultiPolygon;
pMultiPolygon = nullptr;
return 0;