这样安全吗?我的意思是删除只关心它给出的地址还是删除原始指针变量很重要?
myClass *p1 = new myClass();
myClass *p2 = p1;
delete p2;
p1 = NULL;
p2 = NULL;
Run Code Online (Sandbox Code Playgroud) 我正在用C#构建一个小编译器,所以我不得不插手动态组件和发出操作码.现在,奇怪的是我的Emit()调用在生成的模块中创建了额外的nop操作码.在我的情况下并不是那么重要,因为性能并不是真正关键,但它真的让我感到困惑,为什么会发生这种情况.它似乎是在加载或存储到本地或参数后发生的.任何C#/动态组装专家可以指出我可以检查的事情?我附上了生成代码的示例,如果需要更多信息,请告诉我.谢谢.
IL_0000: ldc.i4 0x0
IL_0005: stloc c
IL_0009: nop
IL_000a: nop
IL_000b: ldloc c
IL_000f: nop
IL_0010: nop
IL_0011: stloc i
IL_0015: nop
IL_0016: nop
IL_0017: ldarg s
IL_001b: nop
IL_001c: nop
IL_001d: ldloc i
IL_0021: nop
IL_0022: nop
IL_0023: add
IL_0024: stloc $0
IL_0028: nop
IL_0029: nop
IL_002a: ldloc $0
IL_002e: nop
IL_002f: nop
IL_0030: ldind.i1
IL_0031: ldc.i4 0x0
IL_0036: bne.un IL_0040
IL_003b: br IL_008e
IL_0040: ldloc c
IL_0044: nop
IL_0045: nop
IL_0046: stloc $1
Run Code Online (Sandbox Code Playgroud)
根据要求,下面是我的代码的概述.有些东西缺失,因为代码被分成单独的模块,这些是执行顺序中最相关的部分.
string programName = …Run Code Online (Sandbox Code Playgroud)