Являются ли типы указателей единственным способом «предотвращения» вызова конструктора в объявлении?

0

Я попытался найти это, но я не нашел ответов. Давайте посмотрим на это:

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
}

Мой вопрос: могу ли я объявить объект, не создавая его? Или мне всегда нужно использовать указатели?

  • 3
    Почему ты хочешь? Чего ты пытаешься достичь?
Теги:
pointers

1 ответ

5
Лучший ответ

Мой вопрос: могу ли я объявить объект, не создавая его?

Нет.

Или мне всегда нужно использовать указатели?

Нет. Указатели - один из вариантов. Существуют и другие, такие как boost::optional (std::optional также находится в процессе стандартизации). Существуют также интеллектуальные указатели (std::unique_ptr или std::shared_ptr). Стандартно доступная опция pre-С++ 11, которой проще управлять, чем необработанный указатель, будет std::vector где вы только когда-либо добавляете один элемент.

Но вы абсолютно уверены, что вам это нужно?

  • 0
    Мне это ни к чему не нужно, поскольку я использую типы указателей в сценариях, где мне нужен объект, чтобы иметь переменные-члены, которые, например, должны быть созданы в определенном порядке. Мне просто интересно это. Исходя из мира Java и C #, он чувствует себя нелогичным, что объявление объекта также инициализирует его. Спасибо за Ваш ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню