For example I got a class like this:
#include <iostream>
#include <functional>
class TestClass {
public:
explicit TestClass(std::function<void(void)> f) : f_(std::move(f)) {}
TestClass(const TestClass &) = delete;
TestClass(TestClass &&testobj) {
f_ = testobj.f_;
testobj.f_ = default_f_;
}
~TestClass() { f_(); }
private:
static std::function<void(void)> default_f_;
std::function<void(void)> f_;
};
std::function<void(void)> TestClass::default_f_ = [] { std::cout << "do nothing\n"; };
int main() {
std::function<void(void)> f = [] { std::cout << "do something\n"; };
TestClass t1(f);
TestClass t2(std::move(t1));
}
Even if the old class is useless, The destructor has to be called and in this case, a useless function which duty is only to make sure the f_
is point to something, this is not very efficiency.
So is there some sort of copy destructor tech to avoid this?
Aucun commentaire:
Enregistrer un commentaire