释放实例的函数struct Foo如下:
void DestroyFoo(Foo* foo)
{
if (foo) free(foo);
}
Run Code Online (Sandbox Code Playgroud)
我的一位同事建议如下:
void DestroyFoo(Foo** foo)
{
if (!(*foo)) return;
Foo *tmpFoo = *foo;
*foo = NULL; // prevents future concurrency problems
memset(tmpFoo, 0, sizeof(Foo)); // problems show up immediately if referred to free memory
free(tmpFoo);
}
Run Code Online (Sandbox Code Playgroud)
我看到NULL在释放后将指针设置为更好,但我不确定以下内容:
我们真的需要将指针分配给临时指针吗?它在并发性和共享内存方面有帮助吗?
将整个块设置为0以强制程序崩溃或至少输出具有显着差异的结果真的是一个好主意吗?
我有一个名为Offer的课程如下:
public class Offer
{
public Guid Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int OfferNo { get; set; }
public OfferType OfferType { get; set; }
public DateTimeOffset DateAdded { get; private set; }
public DateTimeOffset DateEdited { get; set; }
public bool IsActive { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我明显使用Id属性作为我的PK.但我还需要显示优惠的ID(因为用户将使用此值搜索优惠),并且Guid属性太长.
因此,我尝试使用DatabaseGeneratedOption.Identity自动递增整数列OfferNo,但我无法设置初始值以递增.我插入了一个虚拟条目,然后尝试将OfferNo设置为除1之外的其他内容,但收到以下异常:
不支持使用"标识"模式修改列.专栏:'OfferNo'.表:'CodeFirstDatabaseSchema.Offer'.
我想使用代码优先设置此自动递增列的初始值.还将理解替代解决方案.