new
используется для динамического выделения памяти. Вам не нужно этого делать, просто сделайте:
test t; // create an instance of test with automatic storage
t.read(); // invoke a method
Ошибка в том, что тип new test()
- это test*
, указатель на (вновь созданный) test
. Вы не можете присвоить test*
test
.
Версия указателя, для чего бы это ни стоило, была бы:
test* t = new test();
t->read(); // the arrow is short for (*test).
delete t; // don't forget to clean up!
Тем не менее, делать сырое выделение памяти подобным образом - плохой стиль. Вместо этого вы использовали бы так называемый умный указатель, чтобы убедиться, что он удаляется автоматически. В стандартной библиотеке есть одна в заголовке <memory>
, которая называется auto_ptr
, и этого будет достаточно:
std::auto_ptr<test> t(new test()); // put a new test into a pointer wrapper
t->read(); // treat it like a normal pointer
// nothing else to worry about, will be deleted automatically
Однако в этом случае вам все это не нужно. Всегда предпочитайте автоматическое (стек) распределение динамическому.