Я попытался найти это, но я не нашел ответов. Давайте посмотрим на это:
class Foo
{
Foo();
Bar a; // 'a', the object, gets created (even if I don't want to!)
Bar* b; // 'b', the pointer, gets created, but the object doesn't
}
Foo::Foo()
{
a = a(); // I'd like to create 'a' here instead. This just "replaces" it
b = new Bar(); // 'b', the object, gets created
}
Мой вопрос: могу ли я объявить объект, не создавая его? Или мне всегда нужно использовать указатели?
Мой вопрос: могу ли я объявить объект, не создавая его?
Нет.
Или мне всегда нужно использовать указатели?
Нет. Указатели - один из вариантов. Существуют и другие, такие как boost::optional
(std::optional
также находится в процессе стандартизации). Существуют также интеллектуальные указатели (std::unique_ptr
или std::shared_ptr
). Стандартно доступная опция pre-С++ 11, которой проще управлять, чем необработанный указатель, будет std::vector
где вы только когда-либо добавляете один элемент.
Но вы абсолютно уверены, что вам это нужно?