Advertisement
TimSenin

Untitled

Oct 13th, 2022
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. struct FunctorClassFactory {
  2.     template <typename Callback>
  3.     static FunctorClass AsCallback(Callback callback) {
  4.         return FunctorClass(std::move(callback));  // Конструктор FunctorClassFactory::AsCallback
  5.     }
  6. };
  7.  
  8. TEST_CASE("CancelDestroys") {
  9.     {
  10.         Defer cleanup = FunctorClassFactory::AsCallback(DestructionCounter());  // Валится вот здесь
  11.         destruction_count = 0;
  12.  
  13.         std::move(cleanup).Cancel();
  14.         REQUIRE(destruction_count == 1);  // Cancel destroys
  15.     }
  16.  
  17.     REQUIRE(destruction_count == 1);  // Canceled cleanup does not double destroy
  18. }
  19.  
  20.  
  21. // Ошибка
  22. /*
  23. error: use of deleted function ‘FunctorClass::FunctorClass(const FunctorClass&)’
  24.    24 |     Defer(Callback callback) : callback_buffer_(callback) {}
  25.       |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~
  26. /home/timofei/cpp-advanced-hse/tasks/errors/defer/test.cpp:107:5: note: declared here
  27.   107 |     FunctorClass(const FunctorClass&) = delete;  // TODO пытается вызвать это
  28.       |     ^~~~~~~~~~~~
  29. */
  30. // Не понимаю, почему вызывается конструктор копирования, а не мув конструктор
  31.  
  32.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement