我注意到这种奇怪的行为/错误,其中在初始化实际对象之前调用了类方法。我有一个包装对象,它有operator->()
方法。现在,当我使用该operator->()
方法将对象作为构造函数中的构造函数参数传递给另一个对象时,实际的包装器对象不会被构造,而只是运行该operator->()
方法。
由于实际的代码示例非常复杂并且依赖于许多其他的东西,我将只展示可能无法正确编译的 C++ 代码片段:
template<typename T>
class wrapper_object_type
{
public:
wrapper_object_type() {/*does not run*/}
T* operator->() {/*does run*/}
};
class bad_behaviour
{
public:
bad_behaviour() : another_object(wrapper_object->t_object)
{/*crashes(0xccc access violation*/}
};
那么标准中是否定义了一些可能允许这种行为的东西?或者更准确地说,是否有一些隐式构造等可以绕过默认构造?