小编Mat*_*ins的帖子

工会和打字

我一直在寻找,但找不到明确的答案.

很多人说使用工会来打字 - 双关语是不明确的和不好的做法.为什么是这样?考虑到你写入原始信息的内存并不仅仅是自己的改变,我看不出为什么它会做任何未定义的任何原因(除非它超出了堆栈的范围,但这不是一个联合问题,这将是糟糕的设计).

人们引用严格的别名规则,但在我看来,就像说你不能这样做,因为你做不到.

如果不打双关语,联盟的意义又是什么呢?我在某个地方看到它们应该被用来在不同的时间使用相同的内存位置来获取不同的信息,但为什么不在再次使用之前删除信息呢?

总结一下:

  1. 为什么使用工会进行打字是不好的?
  2. 如果不是这样,他们的意义何在?

额外信息:我主要使用的是C++,但想了解它和C.特别是我正在使用工会在浮点数和原始十六进制之间进行转换以通过CAN总线发送.

c c++ unions type-punning

63
推荐指数
4
解决办法
1万
查看次数

我可以重用我删除的变量或对象吗?

我一直试图解决这个问题,但不能完全理解它.

假设我在头文件中声明了一个对象,例如:

#ifndef SOMECLASS_H
#define SOMECLASS_H

#include "otherclass.h"

class SomeClass
{
public:
    SomeClass();
    OtherClass *obj;
};

#endif // SOMECLASS_H
Run Code Online (Sandbox Code Playgroud)

我可以在我的代码中执行以下操作吗?

obj = new OtherClass();

//Do something

delete obj;

obj = new OtherClass();

//Do something else

delete obj;
Run Code Online (Sandbox Code Playgroud)

或者我必须创建一个新的obj

我无法想到我可能需要这样做的原因,但我想知道它是否会起作用以及它是否是一个好主意(我知道最好在堆栈上创建对象但是为了论证,让我们说在这种情况下它不是一个选项).

c++

0
推荐指数
1
解决办法
1535
查看次数

标签 统计

c++ ×2

c ×1

type-punning ×1

unions ×1