c++ - 默认(隐式)构造函数的作用到底是什么?

标签 c++

来自C++的思考

The first hidden argument to the constructor is the this pointer. this pointer holds the address of the caller object. In the case of constructor this pointer points towards an uninitialized block of memory. It is the job of the constructor to initialize this block of memory properly.

那么,基本上,构造函数用于获取指向对象在 RAM 中的空间的指针?那是对的吗?

默认构造函数如何初始化该内存?它是否被初始化为零?

最佳答案

默认构造函数的作用与任何其他构造函数相同:初始化对象。默认构造函数(或仅具有默认参数的构造函数)将成员变量设置为已知状态,例如将指针设置为 nullptr(或 0)等。

假设我们有这样的结构:

struct Foo
{
    int a;
    int* b;

    // Default constructor
    // Set `a` to `1`, and `b` to `nullptr`
    Foo() : a(1), b(nullptr) {}
};

现在,当您声明 Foo 类的实例时,您知道成员变量将具有什么状态。如果没有构造函数,Foo 类的普通局部变量实例将具有未定义的 ab 成员值。

如果您根本不提供构造函数,无论是默认构造函数还是其他构造函数,编译器都会为您创建一个默认构造函数(需要一个构造函数,否则您将无法创建类的实例),但它会不对成员进行任何初始化。

所讨论的隐藏参数,是称为this 的变量,它存在于所有非static 的成员函数中。

关于c++ - 默认(隐式)构造函数的作用到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18757528/

相关文章:

c++ - 使用相同的迭代器遍历两个 std::vector

c++ - O'Reilly 的 "Objective-C Pocket Reference"声称 C++ 不支持动态调度,这是真的吗?

c++ - 如何从指针容器中找到一个元素?

java - Linux,java.lang.UnsatisfiedLinkError : no "library file" in java. library.path

c++ - 从指针 vector 中删除内容

c++ - 使用 CREATE_NEW_CONSOLE 创建进程并保持控制台窗口打开

c++ - 如何计算双向链表中元素的数量?

c++ - kd-tree 中的无限递归

c++ - 如果参数是 uint64 类型,则 Ffs 不会返回正确的结果

c++ - 为什么在动态数组上以特定方式调用 'delete' 不起作用?