diff --git a/DirectX/player/commandPlayer.h b/DirectX/player/commandPlayer.h index 56ce99c..1d1ac83 100644 --- a/DirectX/player/commandPlayer.h +++ b/DirectX/player/commandPlayer.h @@ -50,7 +50,7 @@ class CommandPlayer : public CFunction { void Read(CBinIStream& stream) override { unsigned size = 0; stream.read(reinterpret_cast(&size), sizeof(unsigned)); - data_.resize(size); + data_ = HeapArray(size); stream.read(data_.data(), size); decodeCommand(); @@ -64,7 +64,7 @@ class CommandPlayer : public CFunction { virtual void decodeCommand() {} protected: - std::vector data_; + HeapArray data_; private: FakeArgument argument_; diff --git a/common/legacy/include/tools.h b/common/legacy/include/tools.h index ec7ffe0..cc31b18 100644 --- a/common/legacy/include/tools.h +++ b/common/legacy/include/tools.h @@ -641,4 +641,55 @@ class SharedLibrary { } }; +template +class HeapArray { +public: + HeapArray() {} + HeapArray(const std::size_t size) : size_(size) { + data_ = new T[size]; + } + + ~HeapArray() { + delete[] data_; + } + + std::size_t size() const { + return size_; + } + + const T* data() const { + return data_; + } + + T* data() { + return data_; + } + + HeapArray& operator=(const HeapArray& other) = delete; + HeapArray(const HeapArray& other) = delete; + + HeapArray& operator=(HeapArray&& other) noexcept { + delete[] data_; + data_ = other.data_; + size_ = other.size_; + + other.data_ = nullptr; + other.size_ = 0; + + return *this; + } + + HeapArray(HeapArray&& other) { + data_ = other.data_; + size_ = other.size_; + + other.data_ = nullptr; + other.size_ = 0; + } + +private: + T* data_ = nullptr; + std::size_t size_ = 0; +}; + } // namespace gits