指针的直接初始化
Direct initialization of a pointer
我在《C++ 入门》一书中阅读了一些示例代码:
我不明白在 ps(new std::string(s))
和 ps(new std::string(*p.ps))
中指针的直接初始化是如何工作的。
如果 ps
是指向字符串的指针,那么为什么可以将字符串作为其直接初始化构造函数中的参数?
class HasPtr {
public:
HasPtr(const std::string &s = std::string()):
ps(new std::string(s)), i(0) { }
// each HasPtr has its own copy of the string to which ps points
HasPtr(const HasPtr &p):
ps(new std::string(*p.ps)), i(p.i) { }
HasPtr& operator=(const HasPtr &);
~HasPtr() { delete ps; }
private:
std::string *ps;
int i;
};
new
表达式为堆上的 std::string
创建 space 并 returns 指向它的指针。因此,它不是 ps 初始化的字符串,而是指向字符串的指针,ps 是.
的一种类型
HasPtr::ps
是 std::string*
.
如果我像这样取消引用 std::string*
*ps
,我会得到实际的 std::string
对象。
如果我有一个对象 const HasPtr p
,我可以使用 p.ps
获取它的指向 std::string
的成员指针。 这只可能在 class HasPtr
内,因为 ps
是 private
。
如果我这样做 *p.ps
我将得到 p
的成员 std::string*
指向的 std::string
。
所以代码:
HasPtr(const HasPtr &p):
ps(新std::string(*p.ps)), i(p.i) {}
正在使用 std::string
copy constructor 初始化将由 HasPtr
复制构造函数分配给 this->ps
的动态创建的 std::string
。
我在《C++ 入门》一书中阅读了一些示例代码:
我不明白在 ps(new std::string(s))
和 ps(new std::string(*p.ps))
中指针的直接初始化是如何工作的。
如果 ps
是指向字符串的指针,那么为什么可以将字符串作为其直接初始化构造函数中的参数?
class HasPtr {
public:
HasPtr(const std::string &s = std::string()):
ps(new std::string(s)), i(0) { }
// each HasPtr has its own copy of the string to which ps points
HasPtr(const HasPtr &p):
ps(new std::string(*p.ps)), i(p.i) { }
HasPtr& operator=(const HasPtr &);
~HasPtr() { delete ps; }
private:
std::string *ps;
int i;
};
new
表达式为堆上的 std::string
创建 space 并 returns 指向它的指针。因此,它不是 ps 初始化的字符串,而是指向字符串的指针,ps 是.
HasPtr::ps
是 std::string*
.
如果我像这样取消引用 std::string*
*ps
,我会得到实际的 std::string
对象。
如果我有一个对象 const HasPtr p
,我可以使用 p.ps
获取它的指向 std::string
的成员指针。 这只可能在 class HasPtr
内,因为 ps
是 private
。
如果我这样做 *p.ps
我将得到 p
的成员 std::string*
指向的 std::string
。
所以代码: HasPtr(const HasPtr &p): ps(新std::string(*p.ps)), i(p.i) {}
正在使用 std::string
copy constructor 初始化将由 HasPtr
复制构造函数分配给 this->ps
的动态创建的 std::string
。