编译器提供复制CTOR

时间:2013-10-22 08:58:52

标签: c++

分配给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分配多少内存。

2 个答案:

答案 0 :(得分:5)

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

更好的是,使用std::string为你照顾所有的记忆。

(P.S。从技术上讲,行cout << "Addr " << *ptr << endl;为您提供未定义的行为,因为您正在取消引用一个单元化指针。)

答案 1 :(得分:1)

char *在32位计算机上占用4个字节,在64位计算机上占用8个字节。当您将内存(可能使用new分配)分配给ptr时,只有内存地址存储在ptr中,而实际内存分配在堆上。