不能从函数中 return std::shared_ptr

Can't return std::shared_ptr from a function

我对从函数中 returning 共享指针有疑问。在函数的 return 语句行上抛出异常。

函数如下:

// Icp.cpp
std::shared_ptr<ICPResult> Icp::fit() {

    // inner part of function

    // return values from inner part of fucntion
    double fitnessScore = icp.getFitnessScore();
    Eigen::Matrix4f transformation = icp.getFinalTransformation();

    return std::make_shared<ICPResult>(fitnessScore, transformation);
}

header的相关部分header:

// Icp.h
std::shared_ptr<models::detection::ICPResult> fit();

返回 class:

// ICPResult.h
class ICPResult : public DetectionResult {
    public:
        ICPResult();
        ICPResult(const double score, const Eigen::Matrix4f transformation);

        Eigen::Matrix4f transformationIcp;
    private:
};

Parent class:

// DetectionResult.h
class DetectionResult {
    public:
        DetectionResult();
        DetectionResult(const double score);

        double score;

    private:
};

在“...VS17\VC\Tools\MSVC.12.25827\include\memory”中第 892 行的 if 语句

处抛出异常
void _Decref()
    {   // decrement use count
    if (_MT_DECR(_Uses) == 0)
        {   // destroy managed resource, decrement weak reference count
        _Destroy();
        _Decwref();
        }
    }

异常文本: System.AccessViolationException: 'Attempted to read or write protected memory. This is often an indication that other memory is corrupt.'

我通常 return 共享指针没有任何问题,但在这种情况下我不知道是什么问题。在我看来,对共享指针的引用计数存在一些问题,但我不知道如何处理它。如果有任何解决此问题的想法,我将不胜感激。

好的,这是解决方案。关于@Paul B 的回答,问题是每个 class 或包含 Eigen 数据类型的结构都必须处理固定大小的可向量化 Eigen 类型。有关此问题的更多信息,请访问 https://eigen.tuxfamily.org/dox/group__TopicStructHavingEigenMembers.html

我的具体问题的解决方案是将 EIGEN_MAKE_ALIGNED_OPERATOR_NEW 宏添加到 ICPResult.h

的 public 部分
// ICPResult.h
class ICPResult : public DetectionResult {
    public:
        ICPResult();
        ICPResult(const double score, const Eigen::Matrix4f transformation);

        Eigen::Matrix4f transformationIcp;
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
    private:
};

非常感谢