Add proper initializers and remove manual memory management from common classes
parent
abb272600e
commit
513a1129fa
|
@ -23,6 +23,7 @@
|
|||
#include "app/system.h"
|
||||
|
||||
#include "common/logger.h"
|
||||
#include "common/make_unique.h"
|
||||
|
||||
#include "common/resources/inputstream.h"
|
||||
#include "common/resources/outputstream.h"
|
||||
|
@ -68,15 +69,15 @@ bool CConfigFile::Init()
|
|||
bool good;
|
||||
if (m_useCurrentDirectory)
|
||||
{
|
||||
std::ifstream* inputStream = new std::ifstream("./colobot.ini");
|
||||
stream = std::unique_ptr<std::istream>(inputStream);
|
||||
auto inputStream = MakeUnique<std::ifstream>("./colobot.ini");
|
||||
good = inputStream->good();
|
||||
stream = std::move(inputStream);
|
||||
}
|
||||
else
|
||||
{
|
||||
CInputStream* inputStream = new CInputStream("colobot.ini");
|
||||
stream = std::unique_ptr<std::istream>(inputStream);
|
||||
auto inputStream = MakeUnique<CInputStream>("colobot.ini");
|
||||
good = inputStream->is_open();
|
||||
stream = std::move(inputStream);
|
||||
}
|
||||
|
||||
if (good)
|
||||
|
@ -108,15 +109,15 @@ bool CConfigFile::Save()
|
|||
bool good;
|
||||
if (m_useCurrentDirectory)
|
||||
{
|
||||
std::ofstream* outputStream = new std::ofstream("./colobot.ini");
|
||||
stream = std::unique_ptr<std::ostream>(outputStream);
|
||||
auto outputStream = MakeUnique<std::ofstream>("./colobot.ini");
|
||||
good = outputStream->good();
|
||||
stream = std::move(outputStream);
|
||||
}
|
||||
else
|
||||
{
|
||||
COutputStream* outputStream = new COutputStream("colobot.ini");
|
||||
stream = std::unique_ptr<std::ostream>(outputStream);
|
||||
auto outputStream = MakeUnique<COutputStream>("colobot.ini");
|
||||
good = outputStream->is_open();
|
||||
stream = std::move(outputStream);
|
||||
}
|
||||
|
||||
if (good)
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include <cstddef>
|
||||
#include <memory>
|
||||
|
||||
|
||||
/**
|
||||
* A template function to make std::unique_ptr without naked new
|
||||
* It can be replaced with std::make_unique once we use C++14
|
||||
|
@ -29,7 +30,9 @@
|
|||
template<typename T, typename... Args>
|
||||
inline std::unique_ptr<T> MakeUnique(Args&&... args)
|
||||
{
|
||||
//@colobot-lint-exclude NakedNewRule
|
||||
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
|
||||
//@end-colobot-lint-exclude
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -39,5 +42,7 @@ inline std::unique_ptr<T> MakeUnique(Args&&... args)
|
|||
template<typename T>
|
||||
inline std::unique_ptr<T[]> MakeUniqueArray(std::size_t size)
|
||||
{
|
||||
//@colobot-lint-exclude NakedNewRule
|
||||
return std::unique_ptr<T[]>(new T[size]);
|
||||
//@end-colobot-lint-exclude
|
||||
}
|
||||
|
|
|
@ -22,41 +22,39 @@
|
|||
#include "common/resources/inputstreambuffer.h"
|
||||
|
||||
|
||||
CInputStream::CInputStream() : std::istream(new CInputStreamBuffer())
|
||||
CInputStream::CInputStream()
|
||||
: CInputStreamBufferContainer(),
|
||||
std::istream(&m_buffer)
|
||||
{
|
||||
}
|
||||
|
||||
CInputStream::CInputStream(const std::string& filename) : std::istream(new CInputStreamBuffer())
|
||||
CInputStream::CInputStream(const std::string& filename)
|
||||
: CInputStreamBufferContainer(),
|
||||
std::istream(&m_buffer)
|
||||
{
|
||||
open(filename);
|
||||
}
|
||||
|
||||
|
||||
CInputStream::~CInputStream()
|
||||
{
|
||||
delete rdbuf();
|
||||
}
|
||||
|
||||
|
||||
void CInputStream::open(const std::string& filename)
|
||||
{
|
||||
static_cast<CInputStreamBuffer *>(rdbuf())->open(filename);
|
||||
m_buffer.open(filename);
|
||||
}
|
||||
|
||||
|
||||
void CInputStream::close()
|
||||
{
|
||||
static_cast<CInputStreamBuffer *>(rdbuf())->close();
|
||||
m_buffer.close();
|
||||
}
|
||||
|
||||
|
||||
bool CInputStream::is_open()
|
||||
{
|
||||
return static_cast<CInputStreamBuffer *>(rdbuf())->is_open();
|
||||
return m_buffer.is_open();
|
||||
}
|
||||
|
||||
|
||||
std::size_t CInputStream::size()
|
||||
{
|
||||
return static_cast<CInputStreamBuffer *>(rdbuf())->size();
|
||||
return m_buffer.size();
|
||||
}
|
||||
|
|
|
@ -19,12 +19,21 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include "common/resources/inputstreambuffer.h"
|
||||
|
||||
#include <cstddef>
|
||||
#include <istream>
|
||||
#include <string>
|
||||
|
||||
|
||||
class CInputStream : public std::istream
|
||||
class CInputStreamBufferContainer
|
||||
{
|
||||
protected:
|
||||
CInputStreamBuffer m_buffer;
|
||||
};
|
||||
|
||||
|
||||
class CInputStream : public CInputStreamBufferContainer, public std::istream
|
||||
{
|
||||
public:
|
||||
CInputStream();
|
||||
|
|
|
@ -22,35 +22,34 @@
|
|||
#include "common/resources/outputstreambuffer.h"
|
||||
|
||||
|
||||
COutputStream::COutputStream() : std::ostream(new COutputStreamBuffer())
|
||||
COutputStream::COutputStream()
|
||||
: COutputStreamBufferContainer(),
|
||||
std::ostream(&m_buffer)
|
||||
{
|
||||
}
|
||||
|
||||
COutputStream::COutputStream(const std::string& filename) : std::ostream(new COutputStreamBuffer())
|
||||
COutputStream::COutputStream(const std::string& filename)
|
||||
: COutputStreamBufferContainer(),
|
||||
std::ostream(&m_buffer)
|
||||
{
|
||||
open(filename);
|
||||
}
|
||||
|
||||
|
||||
COutputStream::~COutputStream()
|
||||
{
|
||||
delete rdbuf();
|
||||
}
|
||||
|
||||
|
||||
void COutputStream::open(const std::string& filename)
|
||||
{
|
||||
static_cast<COutputStreamBuffer *>(rdbuf())->open(filename);
|
||||
m_buffer.open(filename);
|
||||
}
|
||||
|
||||
|
||||
void COutputStream::close()
|
||||
{
|
||||
static_cast<COutputStreamBuffer *>(rdbuf())->close();
|
||||
m_buffer.close();
|
||||
}
|
||||
|
||||
|
||||
bool COutputStream::is_open()
|
||||
{
|
||||
return static_cast<COutputStreamBuffer *>(rdbuf())->is_open();
|
||||
return m_buffer.is_open();
|
||||
}
|
||||
|
|
|
@ -19,11 +19,19 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include "common/resources/outputstreambuffer.h"
|
||||
|
||||
#include <ostream>
|
||||
#include <string>
|
||||
|
||||
|
||||
class COutputStream : public std::ostream
|
||||
class COutputStreamBufferContainer
|
||||
{
|
||||
protected:
|
||||
COutputStreamBuffer m_buffer;
|
||||
};
|
||||
|
||||
class COutputStream : public COutputStreamBufferContainer, public std::ostream
|
||||
{
|
||||
public:
|
||||
COutputStream();
|
||||
|
|
|
@ -33,7 +33,8 @@ public:
|
|||
using ThreadFunctionPtr = std::function<void()>;
|
||||
|
||||
CSDLThreadWrapper(ThreadFunctionPtr threadFunction)
|
||||
: m_threadFunction(threadFunction)
|
||||
: m_threadFunction(threadFunction),
|
||||
m_thread(nullptr)
|
||||
{}
|
||||
|
||||
~CSDLThreadWrapper()
|
||||
|
|
Loading…
Reference in New Issue