草庐IT

weak_ptr_cast

全部标签

c++ - g++ -Wall 没有关于 double-> int cast 的警告

在以下代码段中,不会产生任何警告。g++4.4.3-Wall-pedantic//fisvoidf(int);f(3.14);doubled=3.14;inti=d+2;我强烈记得这是一个警告,类似于“可能丢失精度”。是被删除了还是我的内存在欺骗我?如何在g++中将其变成警告?我觉得这是一个有用的警告,还是一个坏主意?我什至在http://gcc.gnu.org/onlinedocs/gcc-4.4.5/gcc/Warning-Options.html上都找不到合适的东西 最佳答案 $gcc-Wconversiontest.ctes

c++ - 当你想实现一个可以返回 "nothing"的函数时,何时使用 boost::optional 以及何时使用 std::unique_ptr ?

据我了解,有两种方法可以实现有时不返回结果的函数(例如在ppl列表中找到的人)。*-我们忽略原始ptr版本,与bool标志配对,并在未找到版本时出现异常。boost::optionalfindPersonInList();或std::unique_ptrfindPersonInList();那么有什么理由比另一个更喜欢一个吗? 最佳答案 这取决于:您希望返回句柄还是拷贝。如果你想返回一个句柄:Person*boost::optional都是可接受的选择。我倾向于使用Ptr在空访问的情况下抛出的类,但这是我的偏执狂。如果您希望返回拷贝

C++:使用 boost::dynamic_pointer_cast 时出现 "... is not a polymorphic type"

为什么我会收到以下代码的以下错误?1>C:\Libs\boost_1_44\boost/smart_ptr/shared_ptr.hpp(259):errorC2683:'dynamic_cast':'my_namespace::A'isnotapolymorphictype1>D:\[location]\[header_filename].h(35):seedeclarationof'my_namespace::A'1>C:\Libs\boost_1_44\boost/smart_ptr/shared_ptr.hpp(522):seereferencetofunctiontempla

c++ - 当在 std::list<shared_ptr> 的 C++14 初始化列表中间抛出时,GCC(但不是 Clang)下的内存泄漏

考虑以下程序:#include#include#include#includeclassFoo{public:Foo(){if(s_ct==0){throwstd::bad_alloc();}--s_ct;fprintf(stderr,"ctor%p\n",this);}~Foo(){fprintf(stderr,"dtor%p\n",this);}private:staticints_ct;};intFoo::s_ct=2;intmain(){try{std::list>l={std::make_shared(),std::make_shared(),std::make_shared

c++ - shared_ptr 如何提供 noexcept 分配?

std::shared_ptr如何提供noexceptoperator=?当然,如果这个shared_ptr是最后一个,那么它必须销毁它的内容,并且不能保证那个对象的析构函数不会抛出,或者原来使用的自定义删除器不会扔。 最佳答案 对我来说似乎是个缺陷,虽然我在activeissueslist中找不到一个(虽然#2104类似)。根据[C++11:20.7.2.2.3/1],赋值定义为等价于shared_ptr(r).swap(*this);但根据[C++11:20.7.2.2.2],~shared_ptr本身不是noexcept。除非

c++ - 将 std::unique_ptr 推回 std::vector 时编译器不会失败

一个unique_ptr不能被推回std::vector因为它是不可复制的,除非使用std::move.但是,如果F是一个返回unique_ptr的函数,那么std::vector::push_back(F())操作是允许的.下面有一个例子:#include#include#includeclassA{public:intf(){return_f+10;}private:int_f=20;};std::unique_ptrcreate(){returnstd::unique_ptr(newA);}intmain(){std::unique_ptrp1(newA());std::vect

c++ - static_cast 与 dynamic_cast

这个问题在这里已经有了答案:关闭13年前.PossibleDuplicate:Regularcastvs.static_castvs.dynamic_cast我不太明白何时使用静态类型转换和何时使用动态类型转换。请问有什么解释吗? 最佳答案 从基类类型转换为派生类类型时使用dynamic_cast。它检查被强制转换的对象实际上是派生类类型,如果对象不是所需类型,则返回一个空指针(除非你正在强制转换为引用类型——然后它会抛出一个bad_cast异常)。如果不需要此额外检查,请使用static_cast。正如Arkaitz所说,由于dy

python - Numpy.dot 类型错误 : Cannot cast array data from dtype ('float64' ) to dtype ('S32' ) according to the rule 'safe'

为什么我在使用np.dot(a,b.T)时会收到此错误:TypeError:Cannotcastarraydatafromdtype('float64')todtype('S32')accordingtotherule'safe'a和b的类型是numpy.ndarray。我的NumPy版本是1.11.0。 最佳答案 只需从BrenBarn和WarrenWeckesser获取输入以提供应该运行的代码片段(通过将字符串转换为float):a=map(lambdax:float(x),a)b=map(lambdax:float(x),b)

python - Boost.Python:如何公开 std::unique_ptr

我对boost.python还很陌生,并试图将函数的返回值公开给python。函数签名如下所示:std::unique_ptrsomeFunc(conststd::string&str)const;在python中调用函数时,出现如下错误:TypeError:Noto_python(by-value)converterfoundforC++type:std::unique_ptr>我在python中的函数调用如下所示:a=mymodule.MyClass()a.someFunc("somestringhere")#errorhere我试图公开std::unique_ptr但无法让它工作

java - 通过反射和使用 Class.cast() 进行转换

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:JavaClass.cast()vs.castoperator我试图找出Class.cast()的作用或它可能有什么用,但没有成功。同时我想知道我是否可以通过反射转换一个对象。首先我认为下面几行可能会起作用:Objecto="Astring";Stringstr=Class.forName("java.lang.String").cast(object);但如果没有明确的强制转换,它就不起作用。那么Class类的cast方法有什么用呢?是否有可能仅通过反射来转换对象,所以你找到对象的类,在其上使用Class.