1

クラスのポインターへのポインターを作成しようとしています。彼は静的整数を進めるため、デフォルトのc'torを呼び出さないようにしています。そのため、コピー c'tor を使用して var を進めないようにしています。唯一の問題は、正しい構文がわからないことです。コードは次のとおりです。

#include <stdio.h>


class A
{
    static int x;
    int m_x;
    int m_age;
public:
    A(){m_x=x;x++;m_age=0;}
    A(const A& that ){m_age =that.m_age; m_x = that.m_x;}
    A(int age){m_age = age;}
    int getX(){return m_x;}
    int getStaticX(){return x;}
    int getAge(){return m_age;}
};

int A::x = 0 ;

int main()
{
    int size = 15;
    A *tmp = new A[size]();
    A *tmp1;

    //I'm not sure here what is the currect symtax to do this:
    for (int i = 0; i< size;i++)
    {
        tmp1[i] = new A(tmp[i]);
    }
    ////////////////////////////////////////////////////        


    for (int i =0 ;i<size;i++)
    {
            //I want the same result in both prints
        printf("tmp1:%d\n",i);
        printf("age:%d  m_int:%d  static:%d\n",tmp1[i].getAge(),tmp1[i].getX(),tmp1[i].getStaticX());
        printf("tmp:%d\n",i);
        printf("age:%d  m_int:%d  static:%d\n",tmp[i].getAge(),tmp[i].getX(),tmp[i].getStaticX());
        printf("EOF\n\n");
    }


    return 0;
}

ありがとう!

4

4 に答える 4

0

ここまたはここでコピーコンストラクターの例を読んで、実行できます。

A(A& that ){m_age =that.m_age; m_x = that.m_x;}

例えば。

しかし、ここでの問題は、割り当てたが割り当てられtmpていtmp1ないため、これは未割り当てメモリへの割り当てであることです

于 2013-09-12T11:33:10.843 に答える
0

*tmp = 新しい Asize; //Ai が指す A のオブジェクトを 15 個作成します。これらの 15 個のオブジェクトは、作成中にnew 演算子を使用してデフォルトのコンストラクターを 15 回呼び出します。

したがって、出力がインクリメントされます。むしろ使うべき

   int max_size = 15;         
   A *tmp1[size];                
   for (int i = 0; i< max_size;i++)
          tmp1[i] = &tmp[i];  

この解決策はうまくいくと思います。

于 2013-09-12T13:43:45.263 に答える
0

わかりました、私はこのように管理しました:

int main()
{
    int size = 15;
    A *tmp = new A[size]();
    A *tmp1 = tmp;

    for (int i =0 ;i<size;i++)
    {
        printf("tmp1:%d\n",i);
        printf("age:%d  m_int:%d  static:%d\n",tmp1[i].getAge(),tmp1[i].getX(),tmp1[i].getStaticX());
        printf("tmp:%d\n",i);
        printf("age:%d  m_int:%d  static:%d\n",tmp[i].getAge(),tmp[i].getX(),tmp[i].getStaticX());
        printf("EOF\n\n");
    }


    return 0;
}
于 2013-09-12T11:42:43.917 に答える
0

それを行う方法は、ユニット化されたメモリを割り当て、その場でオブジェクトを構築することです:

#include <memory>

A* tmp = new A[size]();
std::pair<A*,std::ptrdiff_t> buf = std:get_temporary_buffer(size);
assert(buf.second == size); // the buffer returned might be smaller than requested

A* tmp1 = buf.first;
std::uninitialized_copy(tmp, tmp+size, tmp1);

残念ながら、あなたのクラスはほとんど壊れていることに注意してください。The rule of threeに従い、代入演算子とデストラクタを実装し、必要に応じてカウンターをデクリメントします。

于 2013-09-12T11:43:24.530 に答える