【发布时间】:2013-12-13 10:00:19
【问题描述】:
这是我在 Visual 2013 上的代码。 我需要有一个对齐的新。 我不能分配只是因为 A 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);
}
};
【问题讨论】:
标签: c++11 compiler-errors sse unique-ptr