c++11 - _mm_free 作为 unique_ptr 的删除器

标签 c++11 compiler-errors sse unique-ptr

这是我在 Visual 2013 上拥有的代码。 我需要有一个对齐的新的。 我不能仅仅因为 CTOR 做了一些有用的事情就进行分配。

知道为什么这不能编译吗?

#include <memory>
#include <emmintrin.h>

struct A{
  A():b(0){b++;}
  int b;
};

template<typename T,int alignment>
inline T* aligned_new(){
    try{
        T*ptr = reinterpret_cast<T*>(_mm_malloc(sizeof(T),alignment));
        new (ptr) T;
        return ptr;
    }
    catch (...)
    {
        return nullptr;
    }
}
template<typename T>
inline void aligned_delete(T*ptr){
    _mm_free(ptr);
}


int main(int argc, char * argv[]){
  std::unique_ptr<A, aligned_delete<A>> var(aligned_new<A,16>);
  return 0;
}

解决方案

template<typename T>
struct aligned_delete {
  void operator()(T* ptr) const {
    _mm_free(ptr);
  }
};

最佳答案

aligned_delete<A>是一个函数,而不是一个类型。

使用重载函数调用运算符创建类型:

template<typename T>
struct aligned_delete {
    void operator()(T* ptr) const {
        _mm_free(ptr);
    }
};

关于c++11 - _mm_free 作为 unique_ptr 的删除器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20563628/

相关文章:

c++ - 为什么我不能在 lambda 中捕获这个通过引用 ('&this' )?

c++ - 专门化成员函数时出现 "too many template-parameter-lists"错误

arm - 常见的 SIMD 技术

C++:如何防止默认构造函数使用 AVX 进行初始化

java - java中的隐式转换运算符+=

c - OpenCL 演示程序可以在一个系统上运行,但不能在其他非常相似的 VirtualBox 系统上运行

c++ - std::move 在 unique_ptr 指向的对象上

c++ - 创建一个程序来输出 4 个三角平方数

c++ - 在递增整数索引时迭代容器的惯用方法是什么?

java - 编译错误: “Not a statement” - Equation inside a for loop