Реализация TPCircularBuffer в классе C++

Я пытаюсь реализовать круговой буфер в моем классе.

Если я инициирую его в методе init, он будет работать, но я хочу объявить переменную буфера в private, чтобы я мог получить к ней доступ из любого места внутри класса:

#import "AudioKit/TPCircularBuffer.h"

class MyClass{
public:
MyClass() { //.. 
}

MyClass(int id, int _channels, double _sampleRate)
{
   // if I uncomment the following line, it works:
   // TPCircularBuffer cbuffer;
   TPCircularBufferInit(&cbuffer, 2048);
}
private:
   // this doesn't work:
   TPCircularBuffer cbuffer;
};

Это приводит к следующей ошибке компиляции:вызов неявно удаленного конструктора копии MyClass.

Я не понимаю?

1 ответ

Поскольку TPCircularBuffer имеет volatile член данных, это тривиально не копируется. Это делает ваш класс просто не копируемым.

Если вам нужно скопировать семантику на MyClass вам нужно предоставить свой собственный конструктор копирования:

MyClass(MyClass const& other) : // ...
{
    TPCircularBufferInit(&cbuffer, 2048); // doesn't copy anything, but you might want to
}
Другие вопросы по тегам