CArrayのn番目要素のアドレスの取得 – プログラミング – Home

CArrayのn番目要素のアドレスの取...
 
通知
すべてクリア

[解決済] CArrayのn番目要素のアドレスの取得


TKH
 TKH
(@TKH)
ゲスト
結合: 22年前
投稿: 23
Topic starter  

TKHと申します。
いつも参考にさせてもらっております。

CArrayのn番目要素のアドレスを取得保存し、
別なところでそのアドレスが指している要素を参照したいのですが、
どのようにすればよいのでしょうか?

例えば
CArray<CMyData, CMyData&> m_MyDataArray;
CMyData* pMyData = &m_MyDataArray[n];
CMyData* pMyData = &m_MyDataArray.GetAt(n);
とした場合、取得できたアドレスは一時的な参照へのアドレス値
となってしまいます。

また、アドレスを取得が取得できた場合
CArray::SetSize()や拡張・挿入・削除などの操作を行った場合、
取得したアドレス(n番目の要素)は不変なのでしょうか?

ご教授お願いします。


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

CArray::GetData()で最初の要素へのポインタが得られますから、n番目の要素は:
CMyData* pMyData = m_MyDataArray.GetDate() + n;

> CArray::SetSize()や拡張・挿入・削除などの操作を行った場合、
> 取得したアドレス(n番目の要素)は不変なのでしょうか?

NO.


返信引用
TKH
 TKH
(@TKH)
ゲスト
結合: 22年前
投稿: 23
Topic starter  

επιστημηさん、ありがとうございます。

引き続きの質問、お願いします。

取得したアドレス(n番目の要素)の変化する件ですが、
以下の場合も変化するのでしょうか?
(1) SetAtGrow(),Add(),Append()
(2) n番目以降の要素の InsertAt(),RemoveAt()
(3) CArrayをvectorに置き換えた場合の同様な操作の場合。

要素のアドレスを取得保存し、その後参照するような操作は、
CArrayでは基本的に行うべきではないのでしょうか?

ご教授お願いします。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> 取得したアドレス(n番目の要素)の変化する件ですが、
> 以下の場合も変化するのでしょうか?
> ...

どれもこれも、やってみれば明らかです。

> 要素のアドレスを取得保存し、その後参照するような操作は、
> CArrayでは基本的に行うべきではないのでしょうか?

case-by-caseでしょう。
挿入/削除を伴わない操作ではポインタに変化がないのですから。


返信引用
REE
 REE
(@REE)
ゲスト
結合: 24年前
投稿: 240
 

>(1) SetAtGrow(),Add(),Append()

変化する可能性はあります。

>(2) n番目以降の要素の InsertAt(),RemoveAt()

InsertAtでは変化する可能性はあります。
RemoveAtでは変化しません

>(3) CArrayをvectorに置き換えた場合の同様な操作の場合。

同様に変化すると思われます。

>要素のアドレスを取得保存し、その後参照するような操作は、
>CArrayでは基本的に行うべきではないのでしょうか?

ポインタの配列を使用すれば、管理の手間は増えますが、
これらの問題を回避できるでしょう。


返信引用
TKH
 TKH
(@TKH)
ゲスト
結合: 22年前
投稿: 23
Topic starter  

CArrayの要素アドレスを取得保存するというのは、
何かと問題が発生しそうなので、別の方法を探ってみます。

ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました