gpt4 book ai didi

c++ - 替换 C++ 中的 delete,错误信息

转载 作者:可可西里 更新时间:2023-11-01 16:46:36 25 4
gpt4 key购买 nike

我正在尝试(并且已经解决)一个包含 SSE 优化成员的类的 16 字节对齐问题。但让我烦恼的是,我在网上找到的大部分示例都包含一行代码,在我看来完全多余,但在很多地方都重复了。

public:
void* operator new (size_t size)throw (std::bad_alloc)
{
void * p = _aligned_malloc(size, 16);
if (p == 0) throw std::bad_alloc();
return p;
}

void operator delete (void *p)
{
Camera* pC = static_cast<Camera*>(p);
_aligned_free(p);
}

有问题的行是

Camera* pC = static_cast<Camera*>(p);

由于 pC 从未被引用并且在函数末尾超出范围,这样做的意义何在?我试过去掉这条线,但它似乎没有任何区别,但这条线出现在很多例子中!我是不是遗漏了一些非常明显的东西,或者是否有一行异常的代码被盲目地从一个示例复制到另一个示例,并在许多“教程”中变得普遍?

最佳答案

一旦进入析构函数,对象就结束了它的生命周期,所以你不能用这个指针做太多事情。线路Camera* pC = static_cast<Camera*>(p);可以安全地删除,它存在于教程中的唯一原因是许多人只是在这里和那里复制粘贴代码,而没有真正考虑它是如何工作的。

delete() 的干净且正确的代码将如下所示:

void operator delete (void *p)
{
_aligned_free(p);
}

关于c++ - 替换 C++ 中的 delete,错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11645834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com