我有这个代码:
struct data {
  void doNothing() {}
};
int main() {
    data* ptr = new data();
    ptr->~data();
    ptr->doNothing();
    ::operator delete(ptr);
}
请注意,doNothing()在对象被销毁之后但在其内存被释放之前被调用.看起来"对象生命周期"已经结束,但指针仍然指向正确分配的内存.成员函数不访问任何成员变量.
在这种情况下,成员函数调用是否合法?
c++ destructor object-lifetime language-lawyer explicit-destructor-call
在C++中,这段代码是否正确?
#include <cstdlib>
#include <cstring>
struct T   // trivially copyable type
{
    int x, y;
};
int main()
{
    void *buf = std::malloc( sizeof(T) );
    if ( !buf ) return 0;
    T a{};
    std::memcpy(buf, &a, sizeof a);
    T *b = static_cast<T *>(buf);
    b->x = b->y;
    free(buf);
}
换句话说,是*b一个生命已经开始的对象?(如果是的话,它什么时候开始呢?)