std::function
örneğim, bir nesne örneğinin üye işlevine bağlıysa ve bu nesne örneği kapsam dışında kaldığında ve başka bir nedenle yok edilirse std::function
nesnesim şimdi çağrılırsa başarısız olacak kötü bir işaretçi olarak kabul edilebilir?std :: nesnesinin işlevine ve nesnenin ömür boyu işlevine işlev
Örnek:
int main(int argc,const char* argv){
type* instance = new type();
std::function<foo(bar)> func = std::bind(type::func,instance);
delete instance;
func(0);//is this an invalid call
}
ne olacağını belirten standardında bir şey var mı? Benim önsezim, nesne artık mevcut olmadığı için atar ve istisnadır.
DÜZENLEME: Standart, ne olacağını belirtiyor mu?
Bu tanımlanmamış bir davranış?
DÜZENLEME 2:
#include <iostream>
#include <functional>
class foo{
public:
void bar(int i){
std::cout<<i<<std::endl;
}
};
int main(int argc, const char * argv[]) {
foo* bar = new foo();
std::function<void(int)> f = std::bind(&foo::bar, bar,std::placeholders::_1);
delete bar;
f(0);//calling the dead objects function? Shouldn't this throw an exception?
return 0;
}
i, 0 bir çıkış değerini almak Bu kod çalıştırma;
Yani, bu tanımlanmamış davranış veya what_? – moooeeeep
Evet, bir işaretçi kullanıyorsunuz. Nesnenin kendisine bağlıysa, kopyalanan IIRC. – Columbo
Bu tanımlanmamış bir davranış mı, yoksa ne olmasını bekleyebilirim ... Bir istisna, işe yarayacak ... başka bir şey. Bunu teorik bir bağlamda soruyorum. –