shared_ptr如何破坏对齐



我正在DirectXMath上阅读文档,无意中发现了下一段:

作为在C++类中直接通过重载new/delete,可以使用pImpl习惯用法如果您确保Impl类在内部通过__aligned_malloc对齐,您可以然后在内部实现中自由使用对齐的类型。这当"public"类是Windows运行时引用时,是一个不错的选项类或打算与std::shared_ptr<>一起使用,否则打乱了仔细的排列。

我不明白shared_ptr是如何改变对齐策略的,它只有一个指针,没有分配对象。

没错,std::shared_ptr不会影响对齐。它只接收一个指向已分配对象的指针,因此,如果该分配导致对象错位,问题不在于std::shared_ptr,而在于该分配。

std::shared_ptr经常与std::make_shared一起使用。CCD_ 5执行单个分配以为CCD_ 6控制结构和CCD_。此分配不是使用任何特定于类的operator new来完成的(也不应该使用(。如果特定于类的operator new设置了比默认分配器更严格的对齐,那么当使用默认分配器时,很容易看出这是如何失败的。

这就是为什么有时侵入式ref计数比std::shared_ptr更受欢迎,您可以显式声明类的对齐要求。

另外,请记住将析构函数声明为private,以禁止(取消(对堆栈的分配。

相关内容

  • 没有找到相关文章

最新更新