我试图使“工厂”类型的单例在程序中生成组件。我想集中进行此操作,以便可以更好地控制程序中的内存分配。
我写了下面的代码,可以进行编译,但是使用它当然不能编译,因为编译器会尝试使用我输入的任何类来编写其版本,并且不包括该类。有没有办法使此代码在保持解耦和安全的同时工作?
template <typename T>
inline T* generateComponent()
{
return new T();
}
答案 0 :(得分:0)
这不是您问题的直接答案,但是我认为您真正要搜索的是new
和delete
的重载。因此,您可以根据需要控制内存管理,并保持生产代码不变。
这是一个如何从cppreference.com形成
的示例#include <cstdio>
#include <cstdlib>
#include <new>
// replacement of a minimal set of functions:
void* operator new(std::size_t sz) {
std::printf("global op new called, size = %zu\n", sz);
void *ptr = std::malloc(sz);
if (ptr)
return ptr;
else
throw std::bad_alloc{};
}
void operator delete(void* ptr) noexcept
{
std::puts("global op delete called");
std::free(ptr);
}
int main() {
int* p1 = new int;
delete p1;
int* p2 = new int[10]; // guaranteed to call the replacement in C++11
delete[] p2;
}
如果您使用new
的隐式调用(例如,调整std::vector
的大小。