我可以安全地使用GDAL和shared_ptr而不是Create / Destroy函数吗?

时间:2017-08-29 14:26:18

标签: c++ c++11 shared-ptr gdal

我正在使用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

Github

上的完整代码

如果我的代码抛出异常,这就避免了内存泄漏的问题。 我的代码编译,运行并创建一个有效的shapefile。

我的问题有两个:

首先; 是否有一个特定的原因我希望内存被库专门分配和解除分配(从而可能在另一个堆上分配),这就是当我调用示例的创建和销毁函数时会发生什么?

其次;除了明显的编程错误之外,由于我提议的替代实现,会出现问题吗?

0 个答案:

没有答案