升级std :: shared_ptr引起segfault
Upcasting a std::shared_ptr causes segfault
这是一个过度简化,但我无法重新创建问题。
#include <memory>
class Base
{
};
class Derived : public Base
{
};
void doSomethingPolymorphical(std::shared_ptr<Base> basePointer)
{
}
int main(int argc, char** argv)
{
std::shared_ptr<Derived> sharedObject = std::make_shared<Derived>();
doSomethingPolymorphical(sharedObject);
return 0;
}
静态检查发现没有错误,并且该程序执行正常。但是,在一个更复杂的程序中,我得到了不可能的segfaults。我试图更改
std::shared_ptr<Derived> sharedObject = std::make_shared<Derived>();
std::shared_ptr<Base> sharedObject = std::make_shared<Derived>();
问题消失了。
我想问一下,我在这里忽略的"升级" shared_ptr
是否有一些问题,或者我的segfaults是否来自其他地方。
要做的一件事是定义基类中的虚拟破坏者,这样,当shared_ptr脱离范围
时,将调用正确的dtorsotoh:似乎是VS2010中的错误,GCC 4.8 Compliles&amp;链接好的
以下代码无法与VS2010链接,错误:
1> derived.obj:错误lnk2005:" public:____thiscall derived :: derived(void)"(?? 0 dedrived @@ qae@xz)已在cpp.obj中定义1> derived.obj:错误lnk2005:" public:virtual __thiscall derived ::〜derived(void)"(?? 1 derevered @@ @@ uae@xz)已在cpp.obj
中定义#include <memory>
#include <iostream>
class Base
{
public:
Base()
{}
virtual ~Base()
{}
virtual void Print() const
{
std::cout << "from Base::Print" << std::endl;
}
};
class Derived : public Base
{
public:
Derived() : Base()
{}
~Derived()
{}
void Print() const
{
std::cout << "from Derived::Print" << std::endl;
}
};
void doSomethingPolymorphical(std::shared_ptr<Base> basePointer)
{
basePointer->Print();
}
int main(int argc, char** argv)
{
std::shared_ptr<Derived> sharedObject = std::make_shared<Derived>();
doSomethingPolymorphical(sharedObject);
return 0;
}
相关文章:
- C++中带有List类的迭代器Segfault
- 使用Vulkan hpp vk::enumerateInstanceVersion()会导致segfault
- QScrollArea:由垂直滚动条引起的水平滚动条
- 由cin中的字符串中未捕获空白引起的分割错误
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- std::partition segfault issue
- OpenSSL: EC_POINT_set_compressed_coordinates_GFp segfault
- C1001内部编译器错误是由于矢量初始化(如数组)引起的
- 检查nullptr是否100%保护内存布局不受segfault影响
- C2675 一元运算符由错误的作用域引起
- 由于矢量引起的错误<string>?
- OpenCV Tracker 属性访问在 ARM 上因 SEGFAULT 而失败,但在 X86_64 中工作
- 将 opencv 从 2.4.13 转换为 3.3.1 时由 cv::resize() 引起的运行错误
- 为什么优化大型 std::vector 数组会导致 SegFault?
- C++segfault,可重复的例子
- 带有zip_source_buffer的libzip会导致数据损坏和/或segfault
- 包含向量引起segfault的sTL矢量
- 升级std :: shared_ptr引起segfault
- Segfault是由std::ostream::sentry在流运算符的过载中引起的
- 引起segfault的矢量或元素