Если вы хотите использовать указатели для «передачи по ссылке», просто сделайте это:
void
func1 (Grid * g)
{
g->a = 5;
}
void
func2 (const Grid * g)
{
std::cout << g->a << std::endl;
}
int
main ()
{
Grid g;
func1(&g);
func2(&g);
}
В настоящее время вы берете указатель (и помните, что сам указатель передается по значению),затем перезаписывает локальную копию этого указателя с указателем на новый, динамически размещаемый объект Grid
.Вы устанавливаете свойство для этого объекта, а затем пропускаете его.
В C ++ вместо этого мы часто используем фактические ссылки, которые могут быть более понятными (хотя, возможно, и не такими ясными в месте вызова!):
void
func1 (Grid& g)
{
g.a = 5;
}
void
func2 (const Grid& g)
{
std::cout << g.a << std::endl;
}
int
main ()
{
Grid g;
func1(g);
func2(g);
}
Что касается этого бита:
Передайте его функции, которая вызывает конструктор класса объекта
Объект уже создан.Вы можете скопировать-назначить из свежего временного объекта, если вы действительно хотите «сбросить» его таким образом:
void
func1 (Grid& g)
{
g = Grid();
g.a = 5;
}
Но я бы посоветовал пересмотреть, действительно ли вы хотите / нужно сбросить объект, какэтот.И, если вы делаете, возможно, хорошая reset()
функция-член?