1

分配给什么内存char *ptr

#include <iostream>
using namespace std;
class A
{ 
  private:
  int count;
  char *ptr;                                 
  public :
  void print()
  {    
  cout << "Addr " << &ptr << endl;     
  cout << "Addr " << *ptr << endl;     
  }       

};

int main()
{
 A obj;
 obj.print();
 A *obj1 = new A(obj); 
 obj1->print();
 cin.get();             
 return 0;   
}

我正在使用编译器提供的复制构造函数。我有兴趣了解我将分配给*ptr.

4

2 回答 2

5

多少内存?好吧,根本没有。你所拥有的只是一个 unitialized char*,它本身占用sizeof(char*)了内存字节。您将需要自己分配内存(可能使用 a new)并将该内存分配给ptr. 完成后不要忘记释放内存(可能使用 a delete);通常在析构函数中完成。

更好的是,使用std::string它会为您处理所有内存。

(从技术上讲,当您取消引用一个未初始化的指针时,该行cout << "Addr " << *ptr << endl;会为您提供未定义的行为)。

于 2013-10-22T09:01:14.947 回答
1

char *32 位机器上单独占用 4 个字节,在 64 位机器上占用 8 个字节。当您将内存(使用new可能分配的)分配给ptr仅存储内存的地址时,ptr实际内存是在堆上分配的。

于 2013-10-22T09:05:07.880 回答