草庐IT

swig_shared_ptr

全部标签

c++ - 如果在 user.hpp 中定义了 BOOST_NO_EXCEPTIONS,为什么不能编译 boost::shared_ptr

我有一个嵌入式系统,想在这个系统中使用boost,但需要禁用异常,因为我不想支付异常成本。boost给了一个user.hpp和可设置的宏选项BOOST_NO_EXCEPTIONS和BOOST_NO_EXCEPTION_STD_NAMESPACE,但是boost::shared_ptr不能编译(更准确的说,不能链接)如果定义了这两个宏。shared_ptr_boost.cpp:(.text._ZN5boost6detail12shared_countC2IiEEPT_[_ZN5boost6detail12shared_countC5IiEEPT_]+0x7a):undefinedrefe

c++ - smart_ptr 到类段错误的属性

我想知道这个例子是否会导致段错误,因为对象的dtor被调用了,我仍然持有指向对象属性的shared_ptr。structfoo{std::shared_ptrconstbar=std::make_shared("foo");foo(){std::coutptr;{std::shared_ptrfoo_ptr=std::make_shared();ptr=foo_ptr->bar;}std::cout 最佳答案 不,它不会。通过将std::shared_ptr分配给另一个,您可以阻止它死亡。此操作ptr=foo_ptr->bar;会将

c++ - *(ptr)[j++] 的替代符号?

在将双指针传递给函数时,我在函数中使用了符号*ptr[j++],这导致程序崩溃。我猜它是由于运算符优先级而发生的,所以我通过编写(*ptr)[j++]来纠正它,但我不喜欢这种表示法。感觉又长又乱。我也知道符号ptr[0][j++]但我也不喜欢它。有没有更好的符号或方法来解决所有这些问题?我的代码:#includeusingnamespacestd;voidmset(int**ptr,size_tsize);voidmain(void){constsize_tsize=10;int*ptr=newint[size];mset(&ptr,size);for(size_tn=0;nP.S我知

c++ - 将 make_unique<X> 分配给 shared_ptr<X>

我(错误地)在我的程序中进行了以下分配:std::shared_ptrm_program;//inclassm_program=std::make_unique();//inmethod当我发现它时,我首先想知道为什么它甚至可以编译。事实证明,shared_ptr对unique_ptr对象有一个特殊的移动赋值运算符。我的问题是,这样做是否总是安全的,或者它有任何影响吗?(对于代码执行来说是安全的;对于代码审查来说显然是不安全的……) 最佳答案 从某种意义上说,这样做是“安全的”,您不会遇到任何重复删除或其他问题。这样做是不行的,因为

C++ 什么是 std::shared_future 和 std::promise

我了解什么是std::future但我不了解何时以及如何使用std::shared_future和std::promise,而且我在网上找不到很好的解释。我会很感激一些帮助我解决这个问题。顺便说一句,这里的例子不是很清楚http://en.cppreference.com/w/cpp/thread/shared_future 最佳答案 std::shared_future当您需要拥有std::future的多个有效拷贝时,并且可能是上述std::future的多个消费者.您可以移动std::future进入std::shared_f

c++ - 使用尚未定义的参数的 unique_ptr 实例化不会导致错误

#includeclassData;std::unique_ptrp;//classData{};//notworkingwithoutthisintmain(){}用g++-5编译这段代码会出现这样的错误:“sizeof”对不完整类型“Data”的无效应用有人可以解释为什么如果我取消注释第4行编译会成功吗?据我所知,在第3行编译器没有关于数据类型的完整信息。我们在这一行中只有前向声明。真正的声明出现在第4行。 最佳答案 unique_ptr类型的目标类型在模板实例化时可能不完整,但在unique_ptr可能尝试处理存储的指针时必须

c++ - c++ shared_ptr中的相互破坏

大家。我在C++解构中发现了一个问题。我将在下面向您展示我的代码:#include#include#includeusingnamespacestd;classB;classA{public:typedefshared_ptrPtr;shared_ptrb;intindex;A(constshared_ptr&b_,intindex_):b(b_),index(index_){}~A(){coutPtr;vectorall_a;voidaddA(){for(inti=0;i(Ptr(this),i);all_a.push_back(a);}}intindex;B(intindex_):

c++ - 将从唯一指针移动到共享指针也会初始化 enable_shared_from_this

当我继承std::enable_shared_from_this,但是我创建了一个unique_ptr,std::enable_shared_from_this里面的weak_ptr也会被初始化吗当我通过std::move或移动构造函数“移动”到shared_ptr时?例如下面的代码会发生什么:#include#includeclassA:publicstd::enable_shared_from_this{public:std::shared_ptrgetA(){returnshared_from_this();}};intmain(){std::unique_ptru(newA()

c++ - std::unique_ptr 是否在其析构函数中将其基础指针设置为 nullptr?

在实现我自己的unique_ptr时(只是为了好玩),我发现它不能通过这个testfile来自libstdcxx:structA;structB{std::unique_ptra;};structA{B*b;~A(){VERIFY(b->a!=nullptr);}};voidtest01(){Bb;b.a.reset(newA);b.a->b=&b;}gccpasses愉快地测试这个文件(当然,这个文件来自libstdcxx),而clangfails对于VERIFY部分。问题:它是依赖于实现还是未定义的行为?我想这个后置条件(b->a!=nullptr)对gcc很重要,否则它不会有测试

c++ - 几个带有 SWIG 的 numpy 数组

我正在使用SWIG将numpy数组从Python传递到C++代码:%include"numpy.i"%init%{import_array();%}%apply(float*INPLACE_ARRAY1,intDIM1){(float*data,intn)};classClass{public:voidtest(float*data,intn){//...}};在Python中:c=Class()a=zeros(5)c.test(a)这可行,但我如何将多个numpy数组传递给同一个函数? 最佳答案 我从同事那里找到了答案:%appl