私が何を意味するかを示しましょう。
#include <functional>
#include <iostream>
class MyClass
{
private:
int number;
public:
MyClass()
{
number = 0;
}
void printNumber()
{
std::cout << "number is " << number << std::endl;
number++;
}
};
int main()
{
std::shared_ptr<MyClass> obj = std::make_shared<MyClass>();
auto function = std::bind(&MyClass::printNumber, obj);
function();
// This deallocates the smart pointer.
obj.reset();
// This shouldn't work, since the object does not exist anymore.
function();
return 0;
}
これは以下を出力します:
number is 0
number is 1
「function()」を「obj->printNumber()」に置き換えて、通常のように関数を呼び出すと、出力は次のようになります。
number is 0
Segmentation fault: 11
あなたがそれを期待するのと同じように。
だから私の質問は、オブジェクトの割り当てが解除されたときに関数を呼び出すことができないことを確認する方法があるかどうかです? これは、スマート ポインターの使用とは関係ありません。通常のポインターと同じように機能します。