std::shared_ptr,std::function 作为自定义删除器和分配器
std::shared_ptr with std::function as custom deleter and allocator
有没有办法让它工作?
#include <functional>
#include <memory>
int main()
{
std::function<unsigned char*(size_t)> allocator
= [](size_t size){
return new unsigned char[size];
};
std::function<void(unsigned char*)> deleter
= [](unsigned char* ptr){
delete[] ptr;
};
std::shared_ptr<unsigned char[]> mem(size_t,deleter,allocator);
return EXIT_SUCCESS;
}
我收到错误:
main.cpp: In function ‘int main()’:
main.cpp:15:49: error: ‘deleter’ is not a type
std::shared_ptr<unsigned char[]> mem(size_t,deleter,allocator);
^~~~~~~
main.cpp:15:57: error: ‘allocator’ is not a type
std::shared_ptr<unsigned char[]> mem(size_t,deleter,allocator);
^~~~~~~~~
更多上下文:
我有模板 class,它保存了一些内存。这是通过 shared_ptr 完成的,它是使用自定义分配器和删除器创建的。 Allocator 和 Deleter 不是 class.
的模板参数
我现在想给 class 添加一个调整大小的方法。我想避免提供新的 Allocator 和 Delter 的需要,并希望将它们保存在 std::function
.
中
分配器不应该处理您的数据分配,它应该处理 shared_ptr
的内部数据的分配。
您需要提供已分配的数据作为构造函数的第一个参数。 shared_ptr
只关心内存清理。
此外,shared_ptr 的模板参数需要是类型 ,没有 间接。
#include <functional>
#include <memory>
int main()
{
std::function<void(unsigned char*)> deleter
= [](unsigned char* ptr){
delete[] ptr;
};
std::shared_ptr<unsigned char> mem(new unsigned char[5], deleter);
return EXIT_SUCCESS;
}
如果可以的话,你应该更喜欢 lambda 而不是 std::function
,它让编译器有可能进行优化。
有没有办法让它工作?
#include <functional>
#include <memory>
int main()
{
std::function<unsigned char*(size_t)> allocator
= [](size_t size){
return new unsigned char[size];
};
std::function<void(unsigned char*)> deleter
= [](unsigned char* ptr){
delete[] ptr;
};
std::shared_ptr<unsigned char[]> mem(size_t,deleter,allocator);
return EXIT_SUCCESS;
}
我收到错误:
main.cpp: In function ‘int main()’:
main.cpp:15:49: error: ‘deleter’ is not a type
std::shared_ptr<unsigned char[]> mem(size_t,deleter,allocator);
^~~~~~~
main.cpp:15:57: error: ‘allocator’ is not a type
std::shared_ptr<unsigned char[]> mem(size_t,deleter,allocator);
^~~~~~~~~
更多上下文:
我有模板 class,它保存了一些内存。这是通过 shared_ptr 完成的,它是使用自定义分配器和删除器创建的。 Allocator 和 Deleter 不是 class.
的模板参数我现在想给 class 添加一个调整大小的方法。我想避免提供新的 Allocator 和 Delter 的需要,并希望将它们保存在 std::function
.
分配器不应该处理您的数据分配,它应该处理 shared_ptr
的内部数据的分配。
您需要提供已分配的数据作为构造函数的第一个参数。 shared_ptr
只关心内存清理。
此外,shared_ptr 的模板参数需要是类型 ,没有 间接。
#include <functional>
#include <memory>
int main()
{
std::function<void(unsigned char*)> deleter
= [](unsigned char* ptr){
delete[] ptr;
};
std::shared_ptr<unsigned char> mem(new unsigned char[5], deleter);
return EXIT_SUCCESS;
}
如果可以的话,你应该更喜欢 lambda 而不是 std::function
,它让编译器有可能进行优化。