そのため、一種のデータ構造にマップとキー クラスを使用する C++ クラスがいくつかあります。私の挿入メソッドでは、典型的な map.insert を使用します。挿入された要素内のいくつかの値 (比較に使用されるものではない) を変更できるように、この関数がポインターを返すようにします。だから私はこれがこれに安全かどうか疑問に思っていました..
template<typename T>
NodeT<T> * TreeT<T>::
MakeNode(PointT point)
{
NodeT<T> * prNode = new NodeT<T>;
//set the contents for the node
prNode->SetNode(point, m_dTolerance);
//Create the key class using the
VectorKey key(point, m_dTolerance);
//Store the key,node as a pair for easy access
return_val = m_tree.insert( pair<VectorKey, NodeT<T> >(key, *prNode) );
if (return_val.second == false)
//if return_val.second is false it wasnt inserted
prNode = NULL;
else
//it was inserted, get a pointer to node
prNode = &(return_val.first->second); //is this safe if I plan to use it later?
return prNode;
}
元のポインター (new で作成したポインター) が、挿入後に間違った要素を指していたという難しい方法を学んだようです。その理由を誰か教えてもらえますか?そこで、return_val イテレーターを使用して正しいポインターを取得しました。私はちょっとイテレータを返したくありませんが、より安全であればそうします...
ありがとう!