diff --git a/src/Nazara/Audio/Loaders/sndfile/Loader.cpp b/src/Nazara/Audio/Loaders/sndfile/Loader.cpp index ffb69fbe2..78ccf7d6c 100644 --- a/src/Nazara/Audio/Loaders/sndfile/Loader.cpp +++ b/src/Nazara/Audio/Loaders/sndfile/Loader.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -112,29 +113,24 @@ namespace sf_command(file, SFC_SET_SCALE_FLOAT_INT_READ, nullptr, SF_TRUE); unsigned int sampleCount = infos.frames*infos.channels; - nzInt16* samples = new nzInt16[sampleCount]; - if (sf_read_short(file, samples, sampleCount) != sampleCount) + std::unique_ptr samples(new nzInt16[sampleCount]); + + if (sf_read_short(file, samples.get(), sampleCount) != sampleCount) { + sf_close(file); NazaraError("Failed to read samples"); - delete[] samples; - sf_close(file); - return false; } - if (!soundBuffer->Create(format, infos.frames*infos.channels, infos.samplerate, samples)) + if (!soundBuffer->Create(format, infos.frames*infos.channels, infos.samplerate, samples.get())) { + sf_close(file); NazaraError("Failed to create sound buffer"); - delete[] samples; - sf_close(file); - return false; } - delete[] samples; - return true; } } diff --git a/src/Nazara/Core/Win32/DirectoryImpl.cpp b/src/Nazara/Core/Win32/DirectoryImpl.cpp index aa8559e5a..786808ca7 100644 --- a/src/Nazara/Core/Win32/DirectoryImpl.cpp +++ b/src/Nazara/Core/Win32/DirectoryImpl.cpp @@ -4,6 +4,7 @@ #include #include +#include #include NzDirectoryImpl::NzDirectoryImpl(const NzDirectory* parent) @@ -60,9 +61,9 @@ bool NzDirectoryImpl::NextResult() bool NzDirectoryImpl::Open(const NzString& dirPath) { NzString searchPath = dirPath + "\\*"; - wchar_t* path = searchPath.GetWideBuffer(); - m_handle = FindFirstFileW(path, &m_result); - delete[] path; + + std::unique_ptr wPath(searchPath.GetWideBuffer()); + m_handle = FindFirstFileW(wPath.get(), &m_result); if (m_handle == INVALID_HANDLE_VALUE) { @@ -77,18 +78,15 @@ bool NzDirectoryImpl::Open(const NzString& dirPath) bool NzDirectoryImpl::Create(const NzString& dirPath) { - wchar_t* path = dirPath.GetWideBuffer(); - bool success = CreateDirectoryW(path, nullptr) != 0; - delete[] path; + std::unique_ptr wPath(dirPath.GetWideBuffer()); - return success || GetLastError() == ERROR_ALREADY_EXISTS; + return (CreateDirectoryW(wPath.get(), nullptr) != 0) || GetLastError() == ERROR_ALREADY_EXISTS; } bool NzDirectoryImpl::Exists(const NzString& dirPath) { - wchar_t* path = dirPath.GetWideBuffer(); - DWORD attributes = GetFileAttributesW(path); - delete[] path; + std::unique_ptr wPath(dirPath.GetWideBuffer()); + DWORD attributes = GetFileAttributesW(wPath.get()); if (attributes != INVALID_FILE_ATTRIBUTES) return (attributes & FILE_ATTRIBUTE_DIRECTORY) != 0; @@ -99,34 +97,29 @@ bool NzDirectoryImpl::Exists(const NzString& dirPath) NzString NzDirectoryImpl::GetCurrent() { NzString currentPath; - wchar_t* path = new wchar_t[MAX_PATH]; + std::unique_ptr path(new wchar_t[MAX_PATH]); - unsigned int size = GetCurrentDirectoryW(MAX_PATH, path); + unsigned int size = GetCurrentDirectoryW(MAX_PATH, path.get()); if (size > MAX_PATH) // La taille prends en compte le caractère nul { - delete[] path; - - path = new wchar_t[size]; - if (GetCurrentDirectoryW(size, path) == 0) - NazaraError("Unable to get current directory: " + NzGetLastSystemError()); + path.reset(new wchar_t[size]); + if (GetCurrentDirectoryW(size, path.get()) != 0) + currentPath = NzString::Unicode(path.get()); else - currentPath = NzString::Unicode(path); + NazaraError("Unable to get current directory: " + NzGetLastSystemError()); } else if (size == 0) NazaraError("Unable to get current directory: " + NzGetLastSystemError()); else - currentPath = NzString::Unicode(path); - - delete[] path; + currentPath = NzString::Unicode(path.get()); return currentPath; } bool NzDirectoryImpl::Remove(const NzString& dirPath) { - wchar_t* path = dirPath.GetWideBuffer(); - bool success = RemoveDirectoryW(path) != 0; - delete[] path; + std::unique_ptr path(dirPath.GetWideBuffer()); + bool success = RemoveDirectoryW(path.get()) != 0; DWORD error = GetLastError(); return success || error == ERROR_FILE_NOT_FOUND || error == ERROR_PATH_NOT_FOUND; diff --git a/src/Nazara/Core/Win32/DynLibImpl.cpp b/src/Nazara/Core/Win32/DynLibImpl.cpp index af32144ec..a0c9b81af 100644 --- a/src/Nazara/Core/Win32/DynLibImpl.cpp +++ b/src/Nazara/Core/Win32/DynLibImpl.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include NzDynLibImpl::NzDynLibImpl(NzDynLib* parent) : @@ -28,9 +29,8 @@ bool NzDynLibImpl::Load(const NzString& libraryPath) if (!path.EndsWith(".dll")) path += ".dll"; - wchar_t* pathW = path.GetWideBuffer(); - m_handle = LoadLibraryExW(pathW, nullptr, LOAD_WITH_ALTERED_SEARCH_PATH); - delete[] pathW; + std::unique_ptr wPath(path.GetWideBuffer()); + m_handle = LoadLibraryExW(wPath.get(), nullptr, LOAD_WITH_ALTERED_SEARCH_PATH); if (m_handle) return true; diff --git a/src/Nazara/Core/Win32/FileImpl.cpp b/src/Nazara/Core/Win32/FileImpl.cpp index 3c5f556e4..09235bd40 100644 --- a/src/Nazara/Core/Win32/FileImpl.cpp +++ b/src/Nazara/Core/Win32/FileImpl.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include NzFileImpl::NzFileImpl(const NzFile* parent) : @@ -91,9 +92,8 @@ bool NzFileImpl::Open(const NzString& filePath, unsigned int mode) if ((mode & NzFile::Lock) == 0) shareMode |= FILE_SHARE_WRITE; - wchar_t* path = filePath.GetWideBuffer(); - m_handle = CreateFileW(path, access, shareMode, nullptr, openMode, 0, nullptr); - delete[] path; + std::unique_ptr path(filePath.GetWideBuffer()); + m_handle = CreateFileW(path.get(), access, shareMode, nullptr, openMode, 0, nullptr); return m_handle != INVALID_HANDLE_VALUE; } @@ -184,13 +184,10 @@ std::size_t NzFileImpl::Write(const void* buffer, std::size_t size) bool NzFileImpl::Copy(const NzString& sourcePath, const NzString& targetPath) { - wchar_t* path = sourcePath.GetWideBuffer(); - wchar_t* newPath = targetPath.GetWideBuffer(); - bool success = CopyFileW(path, newPath, false); - delete[] path; - delete[] newPath; + std::unique_ptr srcPath(sourcePath.GetWideBuffer()); + std::unique_ptr dstPath(targetPath.GetWideBuffer()); - if (success) + if (CopyFileW(srcPath.get(), dstPath.get(), false)) return true; else { @@ -202,11 +199,9 @@ bool NzFileImpl::Copy(const NzString& sourcePath, const NzString& targetPath) bool NzFileImpl::Delete(const NzString& filePath) { - wchar_t* path = filePath.GetWideBuffer(); - bool success = DeleteFileW(path); - delete[] path; + std::unique_ptr path(filePath.GetWideBuffer()); - if (success) + if (DeleteFileW(path.get())) return true; else { @@ -218,9 +213,8 @@ bool NzFileImpl::Delete(const NzString& filePath) bool NzFileImpl::Exists(const NzString& filePath) { - wchar_t* path = filePath.GetWideBuffer(); - HANDLE handle = CreateFileW(path, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr); - delete[] path; + std::unique_ptr path(filePath.GetWideBuffer()); + HANDLE handle = CreateFileW(path.get(), 0, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr); if (handle == INVALID_HANDLE_VALUE) return false; @@ -232,9 +226,8 @@ bool NzFileImpl::Exists(const NzString& filePath) time_t NzFileImpl::GetCreationTime(const NzString& filePath) { - wchar_t* path = filePath.GetWideBuffer(); - HANDLE handle = CreateFileW(path, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr); - delete[] path; + std::unique_ptr path(filePath.GetWideBuffer()); + HANDLE handle = CreateFileW(path.get(), 0, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr); if (handle == INVALID_HANDLE_VALUE) return 0; @@ -255,9 +248,8 @@ time_t NzFileImpl::GetCreationTime(const NzString& filePath) time_t NzFileImpl::GetLastAccessTime(const NzString& filePath) { - wchar_t* path = filePath.GetWideBuffer(); - HANDLE handle = CreateFileW(path, 0, FILE_SHARE_READ, nullptr, OPEN_EXISTING, 0, nullptr); - delete[] path; + std::unique_ptr path(filePath.GetWideBuffer()); + HANDLE handle = CreateFileW(path.get(), 0, FILE_SHARE_READ, nullptr, OPEN_EXISTING, 0, nullptr); if (handle == INVALID_HANDLE_VALUE) return 0; @@ -278,9 +270,8 @@ time_t NzFileImpl::GetLastAccessTime(const NzString& filePath) time_t NzFileImpl::GetLastWriteTime(const NzString& filePath) { - wchar_t* path = filePath.GetWideBuffer(); - HANDLE handle = CreateFileW(path, 0, FILE_SHARE_READ, nullptr, OPEN_EXISTING, 0, nullptr); - delete[] path; + std::unique_ptr path(filePath.GetWideBuffer()); + HANDLE handle = CreateFileW(path.get(), 0, FILE_SHARE_READ, nullptr, OPEN_EXISTING, 0, nullptr); if (handle == INVALID_HANDLE_VALUE) return 0; @@ -301,9 +292,8 @@ time_t NzFileImpl::GetLastWriteTime(const NzString& filePath) nzUInt64 NzFileImpl::GetSize(const NzString& filePath) { - wchar_t* path = filePath.GetWideBuffer(); - HANDLE handle = CreateFileW(path, 0, FILE_SHARE_READ, nullptr, OPEN_EXISTING, 0, nullptr); - delete[] path; + std::unique_ptr path(filePath.GetWideBuffer()); + HANDLE handle = CreateFileW(path.get(), 0, FILE_SHARE_READ, nullptr, OPEN_EXISTING, 0, nullptr); if (handle == INVALID_HANDLE_VALUE) return 0; @@ -319,15 +309,10 @@ nzUInt64 NzFileImpl::GetSize(const NzString& filePath) bool NzFileImpl::Rename(const NzString& sourcePath, const NzString& targetPath) { - wchar_t* path = sourcePath.GetWideBuffer(); - wchar_t* newPath = targetPath.GetWideBuffer(); + std::unique_ptr srcPath(sourcePath.GetWideBuffer()); + std::unique_ptr dstPath(targetPath.GetWideBuffer()); - bool success = MoveFileExW(path, newPath, MOVEFILE_COPY_ALLOWED) != 0; - - delete[] path; - delete[] newPath; - - if (success) + if (MoveFileExW(srcPath.get(), dstPath.get(), MOVEFILE_COPY_ALLOWED)) return true; else { diff --git a/src/Nazara/Utility/SkeletalMesh.cpp b/src/Nazara/Utility/SkeletalMesh.cpp index fe434de2d..440918a18 100644 --- a/src/Nazara/Utility/SkeletalMesh.cpp +++ b/src/Nazara/Utility/SkeletalMesh.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -132,10 +133,10 @@ namespace struct NzSkeletalMeshImpl { + std::unique_ptr bindPoseBuffer; std::vector vertexWeights; std::vector weights; NzCubef aabb; - nzUInt8* bindPoseBuffer; NzIndexBufferConstRef indexBuffer; unsigned int vertexCount; }; @@ -169,7 +170,7 @@ bool NzSkeletalMesh::Create(unsigned int vertexCount, unsigned int weightCount) #endif m_impl = new NzSkeletalMeshImpl; - m_impl->bindPoseBuffer = new nzUInt8[vertexCount*sizeof(NzMeshVertex)]; + m_impl->bindPoseBuffer.reset(new nzUInt8[vertexCount*sizeof(NzMeshVertex)]); m_impl->vertexCount = vertexCount; m_impl->vertexWeights.resize(vertexCount); m_impl->weights.resize(weightCount); @@ -181,7 +182,6 @@ void NzSkeletalMesh::Destroy() { if (m_impl) { - delete[] m_impl->bindPoseBuffer; delete m_impl; m_impl = nullptr; } @@ -217,7 +217,7 @@ void* NzSkeletalMesh::GetBindPoseBuffer() } #endif - return m_impl->bindPoseBuffer; + return m_impl->bindPoseBuffer.get(); } const void* NzSkeletalMesh::GetBindPoseBuffer() const @@ -230,7 +230,7 @@ const void* NzSkeletalMesh::GetBindPoseBuffer() const } #endif - return m_impl->bindPoseBuffer; + return m_impl->bindPoseBuffer.get(); } const NzIndexBuffer* NzSkeletalMesh::GetIndexBuffer() const @@ -358,7 +358,7 @@ void NzSkeletalMesh::Skin(NzMeshVertex* outputBuffer, const NzSkeleton* skeleton #endif SkinningInfos skinningInfos; - skinningInfos.inputVertex = reinterpret_cast(m_impl->bindPoseBuffer); + skinningInfos.inputVertex = reinterpret_cast(m_impl->bindPoseBuffer.get()); skinningInfos.outputVertex = outputBuffer; skinningInfos.joints = skeleton->GetJoints(); skinningInfos.vertexWeights = &m_impl->vertexWeights[0]; diff --git a/src/Nazara/Utility/Win32/WindowImpl.cpp b/src/Nazara/Utility/Win32/WindowImpl.cpp index 4d03f8bf7..65ff007ee 100644 --- a/src/Nazara/Utility/Win32/WindowImpl.cpp +++ b/src/Nazara/Utility/Win32/WindowImpl.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -120,7 +121,7 @@ bool NzWindowImpl::Create(NzVideoMode mode, const NzString& title, nzUInt32 styl m_callback = 0; - wchar_t* wtitle = title.GetWideBuffer(); + std::unique_ptr wtitle(title.GetWideBuffer()); #if NAZARA_UTILITY_THREADED_WINDOW NzMutex mutex; @@ -129,15 +130,13 @@ bool NzWindowImpl::Create(NzVideoMode mode, const NzString& title, nzUInt32 styl // On attend que la fenêtre soit créée mutex.Lock(); - m_thread = new NzThread(WindowThread, &m_handle, win32StyleEx, wtitle, win32Style, x, y, width, height, this, &mutex, &condition); + m_thread = new NzThread(WindowThread, &m_handle, win32StyleEx, wtitle.get(), win32Style, x, y, width, height, this, &mutex, &condition); condition.Wait(&mutex); mutex.Unlock(); #else - m_handle = CreateWindowExW(win32StyleEx, className, wtitle, win32Style, x, y, width, height, nullptr, nullptr, GetModuleHandle(nullptr), this); + m_handle = CreateWindowExW(win32StyleEx, className, wtitle.get(), win32Style, x, y, width, height, nullptr, nullptr, GetModuleHandle(nullptr), this); #endif - delete[] wtitle; - if (fullscreen) { SetForegroundWindow(m_handle); @@ -245,14 +244,10 @@ NzString NzWindowImpl::GetTitle() const titleSize++; // Caractère nul - wchar_t* wTitle = new wchar_t[titleSize]; - GetWindowTextW(m_handle, wTitle, titleSize); + std::unique_ptr wTitle(new wchar_t[titleSize]); + GetWindowTextW(m_handle, wTitle.get(), titleSize); - NzString title = NzString::Unicode(wTitle); - - delete[] wTitle; - - return title; + return NzString::Unicode(wTitle.get()); } unsigned int NzWindowImpl::GetWidth() const @@ -463,9 +458,8 @@ void NzWindowImpl::SetStayOnTop(bool stayOnTop) void NzWindowImpl::SetTitle(const NzString& title) { - wchar_t* wtitle = title.GetWideBuffer(); - SetWindowTextW(m_handle, wtitle); - delete[] wtitle; + std::unique_ptr wTitle(title.GetWideBuffer()); + SetWindowTextW(m_handle, wTitle.get()); } void NzWindowImpl::SetVisible(bool visible)