【发布时间】:2013-01-09 21:58:52
【问题描述】:
我注意到这种奇怪的行为/错误,其中在实际对象初始化之前 调用了类方法。我有一个包装对象,它有operator->() 方法。现在,当我使用 operator->() 方法将对象作为构造函数中的构造函数参数传递给另一个对象时,不会构造实际的包装器对象,而只是运行 operator->() 方法。
由于实际的代码示例非常复杂并且依赖于许多其他的东西,我将只展示可能无法正确编译的 C++ 代码 sn-p:
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*/}
};
那么标准中是否有定义允许这种行为的东西?或者更准确地说,是否有一些隐式构造等可以绕过默认构造?
【问题讨论】:
-
您的代码 sn-p 相当荒谬。
-
wrapper_object在bad_behaviour构造函数中来自哪里? -
wrapper_object在bad_behaviour类中,wrapper_object_type类有一个T类型的静态实例。wrapper_object_type类充当共享实例,与boost::shared_from_this非常相似 -
@weggo
another_object和wrapper_object在bad_behavior类中声明的顺序是什么?如果首先声明another_object,那么我不相信wrapper_object的构造函数会被执行,如果它是一个对象的话。如果wrapper_object是指针类型,那么您只是在处理wrapper_object尚未初始化的事实。 -
您的问题不是独立的。您提供的代码无法编译,您的问题存在于您未提供的代码中。请提供一个实际编译的示例:sscce.org
标签: c++ object operator-overloading construction