我正在使用GDAL在C ++ 11中创建shapefile。
我可以安全地使用shared_pt< SomeGDALType>而不是SomeGDALType :: CreateSomeGDALType()和SomeGDALType :: DestroySomeGDALType(); ?
我注意到示例代码遵循这种模式,适用于库所需的所有指针:
OGRFeature *poFeature
poFeature = OGRFeature::CreateFeature( poLayer->GetLayerDefn() )
... other code that calls library function with above pointer ...
OGRFeature::DestroyFeature( poFeature );
//end of function.
因为我希望我的指针能够很好地清理,所以我想使用像这样的共享指针:
std::shared_ptr<OGRFeature>poFeature(OGRFeature::CreateFeature( poLayer->GetLayerDefn()),OGRFeature::DestroyFeature);;
... other code that calls library function with poFeature.get() ...
//end of function
上的完整代码
如果我的代码抛出异常,这就避免了内存泄漏的问题。 我的代码编译,运行并创建一个有效的shapefile。
我的问题有两个:
首先; 是否有一个特定的原因我希望内存被库专门分配和解除分配(从而可能在另一个堆上分配),这就是当我调用示例的创建和销毁函数时会发生什么?
其次;除了明显的编程错误之外,由于我提议的替代实现,会出现问题吗?