プロが教えるわが家の防犯対策術!

C++/CLIの構造体のコンストラクタについて

C++/CLIで、固定サイズの配列を持つ構造体を、次のようにコーディングして使っています。


value struct AAA
{
public:
  array<unsigned short>^ m1;
  AAA(unsigned short dummy)
  {
    m1 = gcnew array<unsigned short>(4);
  }
};

AAA ^struct0 = gcnew AAA(0);


この方法で正常に動作するのですが、2点ほど気になる点があります。

(1) コンストラクタAAA(unsigned short dummy)を実装しなくても済む方法がないか?
(2) この方法では、struct0を、ネイティブヒープ領域に割り当てられない
(AAA *struct0 = new AAA(0))でコンパイルエラー)

(1)と(2)は関連する気もするのですが、これらを解決する方法はあるのでしょうか?

A 回答 (2件)

>構造体をネイティブヒープ、マネージヒープのいずれにも割り当てることができれば、


言語仕様的に不可能です。
そもそもなんでそんなことが必要なんでしょうか?

C++/CLIでWin32APIを使うときはネイティブヒープ(スタックでも)の構造体でやり取りしますし。
    • good
    • 0
この回答へのお礼

参考になりました。
ありがとうございました。

お礼日時:2010/10/15 09:00

単にvalueクラスにしなければいいのでは?



struct AAA
{
  unsigned short m1[4];
};

この回答への補足

回答ありがとうございます。
説明不足でしたので補足いたします。

当方、ネイティブDLLをC++/CLIに対応させる作業を行っており、
構造体をネイティブヒープ、マネージヒープのいずれにも割り当てることができれば、
より、使い勝手も良くなるものと考えています。

構造体AAAをネイティブクラスにすると、
逆に、マネージヒープへの割り当てができなくなってしまいました。

OK: AAA * struct0 = new AAA;
NG: AAA ^ struct0 = gcnew AAA;

補足日時:2010/10/13 11:35
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!