c++ 将指向唯一类数据成员类型的指针强制转换为类指针

pprl5pva  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(114)

说我有

T rawData;
class A {
public:
  T data; // the only data member
  void process(void);
  // more methods;
};

为了使用ptr->process();和其他方法,最安全的A* ptr = (A*) &rawData;方法是什么?
上面的方法是可行的,但是有些编译器会在违反严格的别名规则时发出警告。当然,创建一个A的示例,设置data,然后在所有处理之后取回它是安全的--但这正是我想避免的。

gk7wooem

gk7wooem1#

某些编译器在违反严格的别名规则时发出警告
他们是绝对正确的。解决方案,他们会接受:

A* ptr = new (&rawData) A;

但是,如果你把void A::process()变成一个自由函数void process(T& data),这将是一个更好的解决方案。

相关问题