我有一个名为sfract
的类,它存储指向二叉树根节点的指针。显然,当复制构造sfract
时,我需要克隆另一个sfract
对象的二叉树。但是,复制构造函数永远不会被调用,我认为是因为复制省略。这会导致两个sfract
对象在解构时引用并尝试解除分配相同的根节点。我怎样才能防止这种情况发生?
//main.cpp
sfract_type a( /*...*/ );
sfract_type b( /*...*/ );
sfract_type c( a ); // copy construct
//sfract.h
template< class FType, class Alloc >
sfract( sfract< FType, Alloc > const & other )
{
// Clone other's root node and assign to this object
root = other.root->clone();
}
答案 0 :(得分:7)
我看不到你的代码,但你的模板化构造函数不会优先于默认的复制构造函数,因此在FType和Alloc匹配你的类的情况下,将调用默认的。
您有两种选择:
当然,因为你正在重载你的拷贝构造函数,所以确保你的赋值操作符也被正确处理(以及析构函数)。