Giter Site home page Giter Site logo

Comments (6)

rlogiacco avatar rlogiacco commented on July 30, 2024

Would you expect to have a shallow or a deep copy?

from circularbuffer.

Erlkoenig90 avatar Erlkoenig90 commented on July 30, 2024

A shallow copy would hardly be possible reasonably, since the memory is allocated inside the CircularBuffer class. Therefore we need to do a deep copy, which also is convention with C++ classes & containers. We have to re-set the head/tail pointers properly, however, since they would point to the original elements otherwise. Alternatively we can use indices instead of pointers. Similar to #16, we should also make sure that the copy constructors / assignment operators of elements are only called if they exist. I could add that to the PR...

from circularbuffer.

rlogiacco avatar rlogiacco commented on July 30, 2024

Considering this library aims at microcontrollers and memory is a big limitation I would discourage or even disable the whole pass-by-value rather than supporting it via a deep copy. I can already imagine a user invoking a function and ending up with a hardware rest due to memory corruption...

I could understand a shallow copy, but that would have other implications in terms of unexpected side effects.

from circularbuffer.

rlogiacco avatar rlogiacco commented on July 30, 2024

I'm willing to solve this by disabling the copy constructor and the assignment operator based on the principle a deep copy is too memory expensive:

private: 
    CircularBuffer(const CircularBuffer&); // no implementation 
    CircularBuffer& operator=(const CircularBuffer&); // no implementation 

from circularbuffer.

Erlkoenig90 avatar Erlkoenig90 commented on July 30, 2024

A more modern way would be:

    CircularBuffer(const CircularBuffer&) = delete;
    CircularBuffer(CircularBuffer&&) = delete;
    CircularBuffer& operator=(const CircularBuffer&) = delete;
    CircularBuffer& operator=(CircularBuffer&&) = delete;

The visibility shoud probably be public: as that probably results in better compiler errors. I added the rvalue variants for completeness.

from circularbuffer.

rlogiacco avatar rlogiacco commented on July 30, 2024

A more modern way would be:

This makes me feel damn old 👴

from circularbuffer.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.