dynamic-cast

How bad is dynamic casting?

We often hear/read that one should avoid dynamic casting. I was wondering what would be 'good use' examples of it, according to you? Edit: @Sam: yes, I'm aware of that other thread: it is indeed when reading one of the first answers there that I asked my question! ...

c++ dynamic_cast error handling

Is there any good practice related to dynamic_cast error handling (except not using it when you don't have to)? I'm wondering how should I go about NULL and bad_cast it can throw. Should I check for both? And if I catch bad_cast or detect NULL I probably can't recover anyway... For now, I'm using assert to check if dynamic_cast returned ...

What could cause a dynamic_cast to crash ?

I have a piece of code looking like this : TAxis *axis = 0; if (dynamic_cast<MonitorObjectH1C*>(obj)) axis = (dynamic_cast<MonitorObjectH1C*>(obj))->GetXaxis(); Sometimes it crashes : Thread 1 (Thread -1208658240 (LWP 11400)): #0 0x0019e7a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2 #1 0x048c67fb in __waitpid_nocancel () ...

Safely checking the type of a variable

For a system I need to convert a pointer to a long then the long back to the pointer type. As you can guess this is very unsafe. What I wanted to do is use dynamic_cast to do the conversion so if I mixed them I'll get a null pointer. This page says http://publib.boulder.ibm.com/infocenter/lnxpcomp/v7v91/index.jsp?topic=/com.ibm.vacpp7l.d...

dynamic cast with interfaces

I have a class with implements 2 interfaces and inherits 1 class. So, generally it looks like this: class T : public A, public IB, public IC { }; There is one point in the code where I have an "IB *", but could really use an "A *". I was hoping that a dynamic cast would like this: IB *b_ptr = new T; // it's really more complicated, b...

How can I avoid dynamic_cast in my C++ code?

Let's say I have the following class structure: class Car; class FooCar : public Car; class BarCar : public Car; class Engine; class FooEngine : public Engine; class BarEngine : public Engine; Let's also give a Car a handle to its Engine. A FooCar will be created with a FooEngine* and a BarCar will be created with a BarEngine*. Is ...

C#: Casting types dynamically

I currently have this type of code: private void FillObject(Object MainObject, Foo Arg1, Bar Arg2) { if (MainObject is SomeClassType1) { SomeClassType1 HelpObject = (SomeClassType1)MainObject; HelpObject.Property1 = Arg1; HelpObject.Property2 = Arg2; } else if (MainObject is SomeClassType2) { ...

How should I distinguish between subclasses

I have a token class that looks something like this: class Token { public: typedef enum { STRTOK, INTTOK } Type; virtual bool IsA(Type) = 0; } class IntTok : public Token { int data; public: bool IsA(Type t) { return (t == INTTOK); } int GetData() { return data; } } IntTok newToken; if ( newToken.IsA(Token::INTTOK ) {...

dynamic_cast fails

I have a base class and a derived class. Each class has an .h file and a .cpp file. I am doing dynamic_cast of the base class object to the derived class in the following code: h files: class Base { public: Base(); virtual ~Base(); }; class Derived : public Base { public: Derived(){}; void foo(); }; class Another...

Should I be using dynamic_cast<T> for copying?

Update 1: Corrected nonsense code! Thanks for comments, I made a hash of the first snippet, oops. Update 2: Also updated question title, as the use of dynamic_cast has been pointed out as not necessary by answers. What I'm trying to achieve here is a deep copy using strong types; I want to be able to copy Class2 to an...

Difference in behavior while using dynamic_cast with reference and pointers

I was checking the behavior of dynamic_cast and found that when it fails, std::bad_cast exception is thrown only if the destination is a reference type. If the destination is a pointer type then no exception is thrown from the cast. This is my sample code: class A { public: virtual ~A() { } }; class B : public A { };...

Static cast vs. dymamic cast for traversing inheritance hierarchies

I saw one book on C++ mentioning that navigating inheritance hierarchies using static cast is more efficient than using dynamic cast. Example: #include <iostream> #include <typeinfo> using namespace std; class Shape { public: virtual ~Shape() {}; }; class Circle : public Shape {}; class Square : public Shape {}; class Other {}; int ...

Acceptable to use virtual inheritance to prevent accidentally creating a diamond?

This is a simplification of some real code, and a real mistake I made when I didn't realize someone else had already implemented Foo and derived from it. #include <iostream> struct Base { virtual ~Base() { } virtual void print() = 0; }; struct OtherBase { virtual ~OtherBase() { } }; struct Foo : public Base { // better to us...

dynamic_cast of a COM object to a COM interface doesn't bump the reference count, does it?

If I have a C++ class, X, which implements the COM interfaces IY and IZ, and I have a pointer y to the IY interface of an object of type X, and I do this: IZ *z = dynamic_cast<IZ *> ( y ); That doesn't bump the object's reference count, does it? I don't have to do a Release() to account for it, right? If it matters, I'm using ATL/COM...

Is LLVM an exception to the rule for avoiding dynamic casts?

LLVM has it's own hand rolled alternative to RTTI that is a speed improvement over built-in RTTI and allows dynamic casting to classes with no vtable (dyn_cast). However, it can still be used in exactly the way that dynamic_cast<> is used though it does allow it to be used with more classes. dyn_cast<> template documentation LLVM is a ...

Do I need to use dynamic_cast when calling a function that accepts the base class?

I have some classes like this: interface class IA { }; interface class IB { }; public ref class C : public IA, public IB { }; public ref class D { void DoSomething(IA^ aaa) { } void Run() { C^ bob = gcnew C(); DoSomething(dynamic_cast<IA^>(bob)); // #1 DoSomething(bob); // #2 } }; At the moment I always try to use dy...

Is this proper use of dynamic_cast?

I have three classes: Generic, CFG, and Evaluator. Here's Generic: class Generic: public virtual Evaluator, public CFG, public LCDInterface { Here's CFG: class CFG : public virtual Evaluator { And Evaluator subclasses nothing. I'm providing a DLL named PluginLCD, and it has a method called Connect: void PluginLCD::Connect(Evalua...

what exactly is dynamic casting in c++

can anyone tell what exactly is dynamic casting means in c++. where exactly can we use this dynamic casting? this was asked to me in the interview and i went blank for this question:). ...

C++: Safe way to cast an integer to a pointer

I need to convert an integral type which contains an address to the actual pointer type. I could use reinterpret_cast as follows: MyClass *mc1 = reinterpret_cast<MyClass*>(the_integer); However, this does not perform any run-time checks to see if the address in question actually holds a MyClass object. I want to know if there is any b...

dynamic_cast returns NULL but it shouldn't

Hi I'm having the following class hierarchy: class IStorage { [...] } Q_DECLARE_INTERFACE(IStorage, "ch.gorrion.smssender.IStorage/1.0") class ISQLiteStorage: public IStorage { Q_INTERFACES(IStorage) [...] } Q_DECLARE_INTERFACE(ISQLiteStorage, "ch.gorrion.smssender.ISQLiteStorage/1.0") class DASQLiteStorage: public Q...