不能从函数中 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:
};
非常感谢
我对从函数中 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:
};
非常感谢