vector<ClassX> xVec;
if (inputFile.peek() == '$')
{
classX classXInstance; //<==================== local instantiation
readFileElements(classXInstance);//<== pass by reference
if(classXInstance.validate())
{
xVec.push_back(classXInstance);///<=============== added here
}
/// destructor of the local copy is called here
}
我得到一個核心轉儲,試圖調試,但是我得到這麼多的垃圾郵件與gdb,我可以看到該矢量被損壞,不知道是否因爲析構函數被調用是一個原因?類範圍問題的向量?
編輯:
我班這個樣子的
class ClassX
{
public:
ClassX() { numberOfX=0; ppXX = NULL; };
~ClassX();
void validate();
char **setX(const vector<string>& Xss);
inline char **getX() {return ppXX;};
private:
int numberOfX;
char **ppXX;
};
,它包含析構函數如下
ClassX::~ClassX()
{
if (ppXX != NULL)
{
for(int i=0; i < numberOfXX; i++)
{
if (ppXX[i] != NULL)
{
delete [] ppXX[i];
ppXX[i] = NULL;
}
}
// Free array of pointers.
delete [] ppXX;
ppXX = NULL;
}
}
的setX的分配所有必要的內存
驗證給予我是ppX的打印輸出X [i]和如果元件的數目相匹配的字符串矢量
而你遵循[ClassX]的[三規則](http://en.wikipedia.org/wiki/Rule_of_three_%28C%2B%2B_programming%29)? –
你可以發佈'ClassX'的定義嗎?在'push_back()'的調用下將創建一個'classXInstance'副本。如果'ClassX'具有任何動態分配的成員,則必須遵循三個規則。或者,如果C++ 11支持,它可以被移動:'xVec.push_back(std :: move(classXInstance));'。 – hmjd
我是al-but-guaranteeing'readFileElements()'爲'ClassX'的成員變量執行動態分配,並且所述-class不符合[Rule of Three](http://en.wikipedia.org/wiki)/Rule_of_three_(C%2B%2B_programming)) – WhozCraig