Add MakeUniqueArray for array types

master
Piotr Dziwinski 2015-07-17 20:57:12 +02:00
parent b3b6435039
commit 25eaf8f72f
4 changed files with 17 additions and 3 deletions

View File

@ -416,7 +416,7 @@ bool CApplication::Create()
}
#else
GetLogger()->Info("No sound support.\n");
m_sound = new CSoundInterface();
m_sound = MakeUnique<CSoundInterface>();
#endif
m_sound->Create();

View File

@ -30,3 +30,13 @@ inline std::unique_ptr<T> MakeUnique(Args&&... args)
{
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
/**
* A template function to make std::unique_ptr of array type without naked new
* It can be replaced with std::make_unique once we use C++14
*/
template<typename T>
inline std::unique_ptr<T[]> MakeUniqueArray(size_t size)
{
return std::unique_ptr<T[]>(new T[size]);
}

View File

@ -19,6 +19,8 @@
#include "common/resources/inputstreambuffer.h"
#include "common/make_unique.h"
#include "common/resources/resourcemanager.h"
#include <stdexcept>
@ -33,7 +35,7 @@ CInputStreamBuffer::CInputStreamBuffer(size_t bufferSize)
throw std::runtime_error("File buffer must be larger then 0 bytes");
}
m_buffer = std::unique_ptr<char[]>(new char[bufferSize]);
m_buffer = MakeUniqueArray<char>(bufferSize);
}

View File

@ -19,6 +19,8 @@
#include "common/resources/outputstreambuffer.h"
#include "common/make_unique.h"
#include "common/resources/resourcemanager.h"
#include <stdexcept>
@ -32,7 +34,7 @@ COutputStreamBuffer::COutputStreamBuffer(size_t bufferSize)
throw std::runtime_error("File buffer must be larger then 0 bytes");
}
m_buffer = std::unique_ptr<char[]>(new char[bufferSize]);
m_buffer = MakeUniqueArray<char>(bufferSize);
setp(m_buffer.get(), m_buffer.get() + bufferSize);
}