我有以下功能
LinearScheme::LinearScheme() {
cout << " empty constructor" << endl;
}
void LinearScheme::init(
int tableId,
std::string &basePath,
std::vector<size_t> &colElemSizes,
TupleDescMap &tupleDescMap,
size_t defaultMaxFragmentSize,
int numCols,
BoundBases &bounds,
std::vector<int> &colsPartitioned )
{
// This linear scheme ignores bounds
// it could be improved to use colsPartitioned for ordering (TODO)
cout << "init Linear Scheme " << endl;
*this = LinearScheme(); //SEGFAULTS HERE
cout << "after cons here?" << endl;
// init private fields
this->tableId_ = tableId;
this->basePath_ = basePath;
this->colElemSizes_ = colElemSizes;
this->numCols_ = numCols;
this->tupleDescMap_ = tupleDescMap;
this->numFragments_ = 0;
this->defaultMaxFragmentSize_ = defaultMaxFragmentSize;
// fragmentSizesFilename_ init
fragmentSizesFilename_ = basePath_ + boost::lexical_cast <string>(tableId_)
+ "_cs";
struct stat st;
// open existing file if exists. Create new otherwise.
if (stat(fragmentSizesFilename_.c_str(), &st) == 0) // file existed
openExisting();
else
createNew();
}
我初始化init
而不是构造函数的原因是因为LinearScheme
扩展了一个PartitionScheme
(具有虚拟方法的超类)类,而另一个类在递归使用构造函数的情况下执行此操作。
我有一个QuadTree
执行相同初始化的类,因为每个QuadTree
构造函数都是递归应用的。*this = QuadTree(bounds, maxSize)
类的 init 函数中的行QuadTree
工作得很好。
但是,另一个子类 (LinearScheme) 中的这一行*this = LinearScheme()
会导致 Seg 错误。
任何想法为什么会发生这种情况?
编辑 还替换该行:
*this = LinearScheme()
有了这个:
*this;
或将其全部删除以消除 Seg Fault ... 为什么?