Информация об изменениях

Сообщение Re[4]: Безопасно ли присваивать один указатель другому?.. от 26.03.2018 13:56

Изменено 26.03.2018 14:03 AlexGin

Re[4]: Безопасно ли присваивать один указатель другому?..
Здравствуйте, SaZ, Вы писали:

SaZ>Честно прочитал все ссылки. Что-либо по моему вопросу будет? Интересует, например, чему должен быть равен sizeof указателя на метод?


sizeof указателя на метод — такой же, как sizeof(int*);
В общем — sizeof такой же, как у всех других указателей в приложениях данной архитектуры (то есть 4 байта для x86 и 8 байт для x 64).

class Foo 
{
public:
    int f(string str) 
    {
        std::cout << "Foo::f()" << std::endl;
        return 1;
    }
};

int main()
{
    int (Foo::*fptr) (string) = &Foo::f;
    std::cout << "sizeof-fptr=" << sizeof(fptr) << std::endl;
    ...
    return 0;
}


P.S. Вот ещё раз даю ту же самую полезную ссылочку:
https://www.codeguru.com/cpp/cpp/article.php/c17401/C-Tutorial-PointertoMember-Function.htm
более толкового описания по данной теме — я не видел.
Re[4]: Безопасно ли присваивать один указатель другому?..
Здравствуйте, SaZ, Вы писали:

SaZ>Честно прочитал все ссылки. Что-либо по моему вопросу будет?

Вроде выше, в моём ответе, было именно по твоему вопросу (по поводу void*).

SaZ>Интересует, например, чему должен быть равен sizeof указателя на метод?


sizeof указателя на метод — такой же, как sizeof(int*);
В общем — sizeof такой же, как у всех других указателей в приложениях данной архитектуры (то есть 4 байта для x86; 8 байт для x64).

class Foo 
{
public:
    int f(string str) 
    {
        std::cout << "Foo::f()" << std::endl;
        return 1;
    }
};

int main()
{
    int (Foo::*fptr) (string) = &Foo::f;
    std::cout << "sizeof-fptr=" << sizeof(fptr) << std::endl;
    ...
    return 0;
}


P.S. Вот ещё раз даю ту же самую полезную ссылочку:
https://www.codeguru.com/cpp/cpp/article.php/c17401/C-Tutorial-PointertoMember-Function.htm
более толкового описания по данной теме — я не видел.