相关疑难解决方法(0)

指向对象生命周期之外已分配内存的指针是“无效指针[s]”还是“指向对象的指针[s]”?

C++17(草案 N4659)[basic.compound]/3说:

指针类型的每个值都是以下之一:

  • 指向对象或函数的指针(该指针被称为指向该对象或函数),或

  • 超过对象末尾的指针 ([expr.add]),或

  • 该类型的空指针值 ([conv.ptr]),或

  • 无效的指针值。

这些类别中的哪一个属于指向对象生命周期之外已分配内存的指针,特别是以下程序中aat // (1)through// (3)bat的值// (4)

#include<new>
#include<algorithm>

struct S {
    ~S() { /* Non-trivial destructor */ }
};

struct T {
    ~T() { /* Non-trivial destructor */ }
};

int main() {
    void* a = operator new(std::max(sizeof(S), sizeof(T)));
    // (1)
    a = new(a) S;
    static_cast<S*>(a)->~S();
    // (2)
    a = new(a) T;
    static_cast<T*>(a)->~T();
    // (3)
    operator delete(a);   

    void* b = operator …
Run Code Online (Sandbox Code Playgroud)

c++ pointers language-lawyer c++17

5
推荐指数
1
解决办法
265
查看次数

标签 统计

c++ ×1

c++17 ×1

language-lawyer ×1

pointers ×1