C++常见知识

this指针

1)this指针是指向对象自身的指针。 通常在class定义时要用到类型变量自身时,因为这时候还不知道变量名,就用this这样的指针来使用变量自身。
2)this 指针是一个隐含于每一个非静态成员函数中的特殊指针。
3)this 指针被隐含地声明为: ClassName *const this,this指针是只能指向变量自身的常指针。
4)this 指针是个右值,所以不能取得 this 的地址(不能 &this)。
5)this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。

野指针和悬空指针

野指针 悬空指针
未初始化的指针,其指针内容为一个随机值。 指针所指向的内容已被销毁,指针未置空
任何指针变量刚被创建时不会自动成为NULL指针,所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。 指针正常初始化,曾指向过一个正常的对象,但是对象销毁了,该指针未置空,就成了悬空指针。
它没有被正确的初始化于是指向一个随机的内存地址。存在野指针是一个严重的错误。 悬空指针存在并没有什么问题,除非你尝试通过这个指针访问指向的地址空间。
int main() {
    int *p; // 指针未初始化,此时 p 为野指针 
    int *pi = nullptr;

    {
        int i = 6;
        pi = &i; // 此时 pi 指向一个正常的地址
        *pi = 8; // ok
    }   

    *pi = 6; // 由于 pi 指向的变量 i 已经销毁,此时 pi 即成了悬空指针

    return 0;
}

关于new失败

  1. new失败了会怎么样?抛异常bad_alloc,抛了异常就需要捕获。所以对new操作符的返回值进行判断是毫无意义的。
  2. 不让new抛异常怎么办?
 int* p = new (std::nothrow) int; // 这样如果 new 失败了,就不会抛出异常,而是返回空指针
 if ( p == 0 ) // 如此这般,这个判断就有意义了
 	return -1;

猜你喜欢

转载自blog.csdn.net/Vickers_xiaowei/article/details/86581688