塞班C++;建造师 私有构造在Symbian C++中如何工作?< /p> < P>我不知道任何对于Symbian C++的专用构造的原因,但是C++代码中有使用,这取决于所呈现的功能和对意外误用的控制。您可能对在< P>中的讨论感兴趣。如果我记得正确,Symbian C++没有支持正确的异常处理,并且基于两步初始化过程中的对象创建——构造函数不能抛出,因此有一个简单的无抛出构造函数,然后是初始化步骤。两阶段初始化的一个问题是,在用户代码中执行构造和初始化(两个单独的步骤)会带来负担,而且这很容易出错,因为在每次创建对象时都必须记住这一点

塞班C++;建造师 私有构造在Symbian C++中如何工作?< /p> < P>我不知道任何对于Symbian C++的专用构造的原因,但是C++代码中有使用,这取决于所呈现的功能和对意外误用的控制。您可能对在< P>中的讨论感兴趣。如果我记得正确,Symbian C++没有支持正确的异常处理,并且基于两步初始化过程中的对象创建——构造函数不能抛出,因此有一个简单的无抛出构造函数,然后是初始化步骤。两阶段初始化的一个问题是,在用户代码中执行构造和初始化(两个单独的步骤)会带来负担,而且这很容易出错,因为在每次创建对象时都必须记住这一点,c++,symbian,C++,Symbian,为了减轻这种负担,设计依赖于静态函数,如NewL,NewLC(我不记得是否还有更多这样的函数)。在这种环境中,构造函数私有将禁止用户代码在不遵循两阶段初始化的情况下创建该类型的对象,并强制它们使用提供的NewXXX机制。作为类的一部分,这些函数可以访问私有构造函数,实例化对象,然后执行任何初始化。NewL和NewLC几乎涵盖了它,当然特定类可以定义它们想要的任何工厂NewL分配和构造一个对象(可能会离开,因此是L)NewLC分配和构造一个对象,并确保它位于清理堆栈上(因此是C)。由于通常第二阶段

为了减轻这种负担,设计依赖于静态函数,如
NewL
NewLC
(我不记得是否还有更多这样的函数)。在这种环境中,构造函数私有将禁止用户代码在不遵循两阶段初始化的情况下创建该类型的对象,并强制它们使用提供的
NewXXX
机制。作为类的一部分,这些函数可以访问私有构造函数,实例化对象,然后执行任何初始化。

NewL
NewLC
几乎涵盖了它,当然特定类可以定义它们想要的任何工厂
NewL
分配和构造一个对象(可能会离开,因此是L)
NewLC
分配和构造一个对象,并确保它位于清理堆栈上(因此是C)。由于通常第二阶段的构造可以离开,
NewL
可能必须为此将对象放在清理堆栈上,然后在返回之前将其删除,因此尽管
NewLC
似乎做得更多(并且更可能是您想要的),但对于具有非平凡构造的类,它做得比
NewL
少。