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

どのくらいのメモリ?まあ、まったくありません。あなたが持っているのはchar*、それ自体sizeof(char*)がメモリのバイトを占有する unitialized だけです。自分で (おそらく を使用してnew) メモリを割り当て、そのメモリを に割り当てる必要がありますptrdelete使い終わったら、メモリを解放することを忘れないでください (おそらく a を使用)。通常、デストラクタで実行されます。

さらに良いのはstd::string、すべてのメモリを処理する を使用することです。

(PS技術的には、この行cout << "Addr " << *ptr << endl;は、初期化されたポインターを逆参照しているため、未定義の動作をもたらします)。

于 2013-10-22T09:01:14.947 に答える