summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-08-30 08:35:04 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-08-30 08:37:32 +0200
commit0966efb179385b604f1404eed36311f3c4b6e545 (patch)
treef52b9200c5947e466442d7989f90b3f07366436e /dev
parente337f736afd613de6742c942d65e3124101ead8a (diff)
fix: memory leak fixed in `basic_chunk_string`
fix: `tracked_ptr` example for `make_tracked` Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev')
-rw-r--r--dev/examples/tracked_ptr/tracked_ptr.cc2
-rw-r--r--dev/lib/utility/chunk_string.hpp25
2 files changed, 19 insertions, 8 deletions
diff --git a/dev/examples/tracked_ptr/tracked_ptr.cc b/dev/examples/tracked_ptr/tracked_ptr.cc
index 5b70afd..6e3f4a2 100644
--- a/dev/examples/tracked_ptr/tracked_ptr.cc
+++ b/dev/examples/tracked_ptr/tracked_ptr.cc
@@ -9,7 +9,7 @@
static void summon_tracked_ptr()
{
- ocl::memory::tracked_ptr<int> ptr = ocl::memory::make_tracked(42);
+ ocl::memory::tracked_ptr<int> ptr = ocl::memory::make_tracked<int>(42);
std::cout << ptr.data() << "=" << ptr.manager().allocator().allocated_count_ << std::endl;
}
diff --git a/dev/lib/utility/chunk_string.hpp b/dev/lib/utility/chunk_string.hpp
index 2dffccd..958d7a8 100644
--- a/dev/lib/utility/chunk_string.hpp
+++ b/dev/lib/utility/chunk_string.hpp
@@ -27,7 +27,7 @@ namespace ocl
bool bad_{false};
public:
- const bool& bad{bad_};
+ const bool& bad{bad_};
basic_chunk_string() = default;
@@ -41,11 +41,17 @@ namespace ocl
this->operator+=(in);
}
- ~basic_chunk_string() = default;
+ ~basic_chunk_string()
+ {
+ if (extended_chunks_)
+ delete[] extended_chunks_;
+ extended_chunks_ = nullptr;
+ }
- basic_chunk_string& operator=(const basic_chunk_string&) = default;
- basic_chunk_string(const basic_chunk_string&) = default;
+ basic_chunk_string& operator=(const basic_chunk_string&) = delete;
+ basic_chunk_string(const basic_chunk_string&) = delete;
+ public:
basic_chunk_string& operator+=(const std::basic_string<char_type>& in)
{
if (in.empty() || bad_)
@@ -53,7 +59,7 @@ namespace ocl
if (chunk_total_ > max_chunk_size)
{
- bad_ = true;
+ bad_ = true;
return *this;
}
@@ -69,9 +75,14 @@ namespace ocl
return *this;
}
- const std::basic_string<char_type>& str() const noexcept
+ std::basic_string<char_type> str() const noexcept
{
- return packed_chunks_;
+ std::basic_string<char_type> ret;
+
+ ret += packed_chunks_;
+ ret += extended_chunks_;
+
+ return ret;
}
void print() noexcept