On Thursday, 17 December 2020 at 17:46:59 UTC, Steven Schveighoffer wrote:

This isn’t correct. Can you post the code that led you to believe this?

-Steve

Sure.


import std.algorithm;
import std.typecons;
import std.stdio;


struct Buffer
{
        this(size_t size)
        {
                m_buffer.reserve = size;
        }


        void add(const void[] arr)
        {
                m_buffer ~= cast(ubyte[])arr;
        }


        string getSome()
        {
                if(m_buffer.length > 0)
                {
                        return cast(string)m_buffer[0..$];
                }
                else
                {
                        return "";
                }
        }

        void remove(size_t size)
        {
                m_buffer = m_buffer.remove(tuple(0, size));
        }

        ubyte[] m_buffer;
}

void main()
{
        Buffer b = Buffer(16);
        
        b.add("aa");

writeln("b.m_buffer.length ", b.m_buffer.length, ", b.m_buffer.capacity ", b.m_buffer.capacity);

        string s = b.getSome();

        assert(s == "aa");

        b.remove(s.length);

writeln("b.m_buffer.length ", b.m_buffer.length, ", b.m_buffer.capacity ", b.m_buffer.capacity);
}

This will print

b.m_buffer.length 2, b.m_buffer.capacity 31
b.m_buffer.length 0, b.m_buffer.capacity 0

capacity 0, suggests that the array has been deallocated.

Reply via email to