Test2(Test* pTest):m_pTest(pTest), m_nDuplicateID(pTest->getTestID())
{
}
我注意到Test2的用户可能会将NULL传递给构造函数。由于指针在没有验证的情况下被使用,存在访问冲突的风险。
这促使我研究构造函数初始化程序列表中的异常处理。我在一篇文章中发现可以在初始化程序列表中使用try。我编写了一个小测试程序来测试这个概念:
//Test class stores the unique ID and returns the same with API getTestID
class Test
{
public:
Test(int nID):m_nID(nID){
}
int getTestID() const
{
return m_nID;
}
private:
int m_nID;
};
class Test2
{
public:
Test2(Test* pTest)
try :m_pTest(pTest), m_nDuplicateID(pTest->getTestID())
{
}
catch (...)
{
cout<<"exception cought "<< endl;
}
void printDupID()
{
cout<<"Duplicate ID" << m_nDuplicateID << endl;
}
private:
Test* m_pTest;
int m_nDuplicateID;
};
int main(int argc, char* argv[])
{
Test* pTest = new Test(10);
Test2 aTest2(pTest);
aTest2.printDupID();
delete pTest;
return 0;
}
这段代码无法在VC6.0中编译。我需要做出哪些修改才能让它在VC6.0中编译?
此外,在一篇文章中,我发现在构造函数的初始化列表中使用try不严格符合C++标准。在这种情况下,我们如何处理构造函数的初始化程序列表中的异常(标准处理方式)?
谢谢。