Squeak.ru - шаблоны программирования

Класс принимает неуказанный инициализатор

Я не понимаю, почему инициализатор для Item_Base принимает другой объект в качестве действительного ввода. Я предполагаю, что здесь используется какая-то неявная перегрузка?

class Item_Base 
{
public:
  Item_Base(const std::string& item_name);
  ~Item_Base(void);
  std::string tostr();
private:
  const std::string name;
};

Item_Base::Item_Base(const std::string& item_name)
:name(item_name)
{
  std::cout << "Constructing: " << name << std::endl;
}

Item_Base::~Item_Base(void)
{
  std::cout << "Destructing: " << name << std::endl;
}

std::string Item_Base::tostr()
{
  return name;
}

int main(int argc, char **argv)
{
  Item_Base red_book("Red Book");
  Item_Base green_bow("Green Bow");
  Item_Base copy_test = red_book;
  Item_Base init_test(green_bow); // Why does this work?

  std::cout << red_book.tostr() << std::endl;
  std::cout << green_bow.tostr() << std::endl;
  std::cout << copy_test.tostr() << std::endl;
  std::cout << init_test.tostr() << std::endl;

  return 0;
}

Вывод

Constructing: Red Book
Constructing: Green Bow
Red Book
Green Bow
Red Book
Green Bow
Destructing: Green Bow
Destructing: Red Book
Destructing: Green Bow
Destructing: Red Book
09.06.2017

Ответы:


1

Если вы хотите предотвратить копирование и назначение, просто удалите эти методы:

Item_Base(const Item_Base&) = delete;
Item_Base& operator=(const Item_Base&) = delete;
09.06.2017
  • Извините, мне следовало пояснить, что я не понимаю, почему инициализация init_test действительна. 09.06.2017
  • @Pax: Это действительно так, потому что вы не использовали предоставленный мной код. 09.06.2017
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...