C++ 转发唯一\u ptr时,未定义的参数求值顺序导致问题

C++ 转发唯一\u ptr时,未定义的参数求值顺序导致问题,c++,C++,我知道函数参数求值的顺序在C++中是未定义的,但这里是我遇到的情况 class LibraryWidget { int data (); } class LibraryContainer { LibraryContainer (std :: unique_ptr <LibraryWidget>, int parameter); } class ApplicationContainer : public LibraryContainer { Applicat

我知道函数参数求值的顺序在C++中是未定义的,但这里是我遇到的情况

class LibraryWidget {
    int data ();
}

class LibraryContainer {
    LibraryContainer (std :: unique_ptr <LibraryWidget>, int parameter);
}

class ApplicationContainer : public LibraryContainer {
    ApplicationContainer (std :: unique_ptr <LibraryWidget> ptr)
    : LibraryContainer (std :: move (ptr), calc_parameter (ptr -> data ()))
    {
    }
}
但不知何故,我觉得有另一种方法可以做到这一点,而不必像这样重定向整个构造函数。我不能立即向某人推荐这个解决方案,因为它必须适应异常安全(如果calc_参数抛出,它可能会泄漏)

我希望在我的枪里有更多的子弹,当这样的问题再次出现时,它们会出现,理想情况下,它们不涉及丢失指针封装,即使是暂时的

所以,即使我有一个解决方案,为了教育的目的,你还能用别的方法解决这个问题吗

private:
ApplicationContainer (LibraryWidget * ptr)
: LibraryContainer (std :: unique_ptr <LibraryWidget> (ptr), calc_parameter (ptr -> data ()))
{
}

public:
ApplicationContiner (std :: unique_ptr <LibraryWidget> (ptr))
: ApplicationContainer (ptr .release ())
{
}