长的故事:安全使用无效*指针对象
目前,我分配了需要被更新到新的相机设备集成了传统的C项目的工作。从设备制造商的API很简单,我需要的是包括自己的头文件和库到类与设备的工作,例如这里是一个代码示例代码段:
MyClass.h
#include <XFactory.h>
...
public:
XFactory::device myDevice;
XFactory::xSmartPtr myPtr;
与设备集成:
MyClass.cpp
#include "MyClass.h"
...
myDevice.GetInfo();
myPtr.GetFrame();
..ect.
但生活总是给你柠檬。每当我#include MyClass.h
到主项目。类似这样的编译错误抛出:
...
/usr/include/c++/4.8/bits/stl_algobase.h:193:5: note: template<class _Tp> const _Tp& std::min(const _Tp&, const _Tp&)
...
做了一些研究,我认为#include <XFactory.h>
调用一些C++头是与冲突在我的项目的一些类定义的宏(如最小/最大...)。我不能修复这些代码,这不是我的,所以这里是我的丑陋的解决方法我的课:
短篇小说:
MyClass.h
typedef void* DeviceHandle_t;
typedef void* FrameHandle_t;
public:
DeviceHandle_t myDevice;
FrameHandle_t myPtr;
MyClass的.cpp
#include <XFactory.h> //to avoid main project include this header
MyClass::MyClass(){
myDevice = new XFactory::device();
myPtr = new XFactory::xSmartPtr();
}
MyClass::~MyClass(){
if (myDevice != NULL){
delete (XFactory::device*)myDevice; //this will call class's destructor, won't it?
myDevice = NULL;
}
if (myDevice != NULL){
delete (XFactory::xSmartPtr*)myPtr ; //this will call class's destructor, won't it?
myPtr = NULL;
}
}
要与dev冰:
((XFactory::device*)myDevice)->GetInfo();
((XFactory::xSmartPtr*)myPtr)->GetFrame();
是的,我无法使用智能指针,因为我的项目是C99,和我几乎都在用C/C++指针的工作经验,是我的解决方法安全?是否有任何其他解决方案不使用原始指针?
您的代码似乎是C++,并且不合法C.另外,您的变量定义应该位于.cpp中,而不是头文件中。也不应该myDevice和myPtr是成员变量而不是全局? –
您关心哪些安全特性?通过使用void指针简单地泄漏内存或类型安全的投降?至于是否调用析构函数,你不能自己测试吗? –
也许你正在使用''而忘记定义'NOMINMAX'。总是这样做。 –