2012-03-16 17 views
1

私は*グラフ1とメモリはすでにそれに割り当てられている(注:問題の一部ではありませんが、グラフは、テンプレートクラスである)と呼ばれるグラフのポインタを持っています。 graph2というグラフの別のインスタンスも作成しました。私は、代入演算子が正しく動作しますが、何らかの理由で、グラフのデストラクタも代入演算子が呼び出された直後に呼び出されるので、デストラクタ呼び出しの後にオーバーロード代入演算子 - C++

Graph<std::string,std::string> *graph1 = new Graph<std::string,std::string>; 
... 
... // Called member functions on graph1 
Graph<std::string,std::string> graph2; 
graph2 = *graph1; 

のようにそれらのオーバーロード代入演算子と呼ばれます。これは正常ですか、私は代入演算子を正しく実装していませんか?

これは私が代入演算子実装方法である:代入演算子の正しい定義は、あなたの戻り値の型としてGraph<VertexType, EdgeType>を使用することにより

Graph<VertexType, EdgeType>& Graph<VertexType, EdgeType>:: 
    operator=(const Graph<VertexType, EdgeType> &source); 

である、あなたは一時的に不要な創造を生成している

template <typename VertexType, typename EdgeType> 
Graph<VertexType, EdgeType> Graph<VertexType, EdgeType>::operator=(const Graph<VertexType, EdgeType> &source) 
{ 
    std::cout << "\tAssignment Operator called\n\n"; 
    if(this == &source) 
    return *this; 

    this->vecOfVertices = source.vecOfVertices; 
    this->orderPtr = source.orderPtr; 
    this->count = source.count; 
    return *this; 
} 
+0

あなたは知っていますか? – Aatch

答えて

6

を変数。デストラクタがオンに実行されているどのオブジェクト

+0

うわー。私は自分自身でこれを見て、テンプレートのパラメータをどこにでも書かなければならないことに混乱していたはずです。ご協力いただきありがとうございます! – jbisa

関連する問題