重新解释代理类型的强制转换安全性

时间:2015-10-05 19:13:56

标签: c++ reinterpret-cast

我想知道执行以下操作是否安全:

原始类型(在我的代码之外定义):

struct Original
{
    unsigned long        index;
    double               x;
    double               y;
};

我的代理类型(添加一个或多个辅助成员变量):

struct Proxy
{
    unsigned long        index;
    double               x;
    double               y;
    unsigned long        aux_data;
};

外部函数的函数签名:

void external_func(Original* arr, int len);

用法:

int len;
Proxy* arr = new Proxy[ len ];
external_func( reinterpret_cast<Original*>( arr ), len );
delete[] arr;

原始结构是在我正在使用的库中定义的(并且不能直接编辑)。该库还包含访问Original *数组的函数。出于我的目的,这些对象中的每一个都有助于存储一些辅助数据(可以通过我的部分代码而不是外部库访问)。当然,如果Original是我代码的一部分,我会在这里使用继承/多态。

或者,这样做会更好:

class Proxy : public Original
{
public:

  unsigned long        aux_data;
};

我需要担心这里的虚拟构造函数吗? 我会使用dynamic_cast而不是reinterpret_cast吗?

0 个答案:

没有答案