Ваш шаблон класса Buffer
можно считать правильным, и это ваша функция example2
, которая является неправильной. Я продолжу на этом основании.
В example1
функция имеет константный параметр ссылки на экземпляр MyClass
. Затем add
метод Buffer
создает копию значения экземпляра, помещая его в свой собственный буфер памяти (надеюсь, Buffer
отслеживает всю эту память). Поэтому тот факт, что example
принимает константную ссылку, не имеет отношения к Buffer
, так как создается копия значения.
В example2
метод add
для Buffer
берет копию указателя на экземпляр MyClass
и сохраняет его в своем собственном буфере памяти. В example2
вы указали, что Buffer
содержит неконстантные указатели на MyClass
, так что вы должны его указывать, поэтому example2
должно быть:
void example2( MyClass & item )
{
Buffer<MyClass *> buffer; // NOW with pointers to MyClass
buffer.add( &item );
}
Теперь вы должны знать, что, если использовать buffer
, item
должен оставаться фиксированным в памяти, пока вы не закончили с ним. Принимая во внимание, что в example1
элементы могут исчезнуть, поскольку вы благополучно сохранили копии в buffer
.