У меня есть приложение, которое выполняет некоторую обработку на некоторых изображениях.
Учитывая, что я знаю ширину/высоту/формат и т.д. (я знаю) и думаю только об определении буфера для хранения данных пикселей:
Затем вместо использования new и delete [] на unsigned char* и сохраняя отдельное примечание о размере буфера, я думаю об упрощении вещей, используя std::vector.
Итак, я бы объявил свой класс примерно так:
#include <vector>
class MyClass
{
    // ... etc. ...
public:
    virtual void OnImageReceived(unsigned char *pPixels, 
        unsigned int uPixelCount);
private:
    std::vector<unsigned char> m_pImageBuffer;    // buffer for 8-bit pixels
    // ... etc. ...
};
Затем, когда я получил новое изображение (определенного размера переменной, но не беспокоиться об этих деталях здесь), я могу просто изменить размер вектора (при необходимости) и скопировать пиксели:
void MyClass::OnImageReceived(unsigned char *pPixels, unsigned int uPixelCount)
{
    // called when a new image is available
    if (m_pImageBuffer.size() != uPixelCount)
    {
        // resize image buffer
        m_pImageBuffer.reserve(uPixelCount);
        m_pImageBuffer.resize(uPixelCount, 0);
    }
    // copy frame to local buffer
    memcpy_s(&m_pImageBuffer[0], m_pImageBuffer.size(), pPixels, uPixelCount);
    // ... process image etc. ...
}
Мне это кажется прекрасным, и мне нравится тот факт, что мне не нужно беспокоиться об управлении памятью, но возникает ряд вопросов:
-  Это допустимое приложение 
std::vectorили есть более подходящий контейнер? -  Я делаю правильную работу по производительности, вызывая 
reserveиresize? -  Всегда ли будет так, что базовая память последовательна, поэтому я могу использовать 
memcpy_s, как показано? 
Любые дополнительные комментарии, критика или советы были бы очень желанными.