Те, кто баловался C / C ++, могут видеть прямо через мой пример использования здесь. Таким образом, я хочу использовать преимущества очистки std::vector
для ведения домашнего хозяйства, чтобы я не разбрасывал delete[]
для каждого места каждый раз, когда я хотел создать байтовый массив определенных известных размеров. Я также надеюсь, что благодаря этому механизму моей общей библиотеки мне не нужно будет выставлять extern "C" lib_cleanup(void*)
, что клиенты должны вызывать для выполнения этой очистки.
#include <vector>
class M
{
private:
static std::vector<std::vector<unsigned char>> m;
public:
static unsigned char* ByteArray(int n)
{
m.emplace_back(n);
return m.back().data();
}
};
namespace X
{
std::vector<std::vector<unsigned char>> m;
unsigned char* ByteArray(int n)
{
m.emplace_back(n);
return m.back().data();
}
};
int main()
{
// unsigned char* buf = M::ByteArray(3); // <-- this is what I like
unsigned char* buf = X::ByteArray(3);
buf[0] = 0xFA;
buf[1] = 0xCE;
buf[2] = 66;
return 0;
}
Теперь, как указано выше, полный фрагмент кода работает с использованием namespace
. Этого достаточно для моих нужд. Но потом я удивился и пожалел, что «1010» был бы лучше. Но это не компилируется по причинам, которые я не знаю почему. Это то, что нужно улучшить в комитете по языку C ++?
Вот ошибка компиляции: https://asciinema.org/a/F5gK4pAIfKWLNVj7qOCAOMQmh