"if new and delete are used the advantage is that the destructor is called"
No.
The destructor is called for any object when that object is destroyed. The object is destroyed when it goes out of scope, or the object containing it is destroyed.
"if there is an internal object and it is not a pointer, the destructor will be called when it goes out of scope."
If by 'internal object' you mean a member of some enclosing object, then it is destroyed when the enclosing object is destroyed.
If by 'internal object' you mean a local variable inside a function or whatever, then it is destroyed when it goes out of scope.
"And finally if a pointer to an object is used and there is objects in it that need to be destroyed than you should have used new/delete so that the destructor is called to handle these objects (once again not using smart pointers!)"
Not exactly. It doesn't make sense to say "you should have used new", because (as above) using new makes absolutely no difference to whether a destructor is called. The destructor is called when the object is destroyed, no matter how it gets destroyed, or how it got created.
If you created an object with 'new', and don't later 'delete' it when the pointer that refers to it has gone, that's a memory leak. The object still exists somewhere in memory but you can never use or reach it, so that's not idea.
The purpose of 'new' is to create an object that will outlive the current scope. The most common situation where this happens is that you call 'new' inside a constructor to create a sub-object, and assign it to a pointer inside the object. This is what my last code example did with objB. There are likely to be other functions that operate on the object during the running of the program, then at the end, when the enclosing object gets destroyed, the destructor for that object ensures that all sub-objects are cleaned up, by explicitly calling 'delete' on anything that was created via new.
You might be wondering why we'd have a pointer inside of a class and create an object via new, instead of just having the object inside the class directly. Usually, if you can, you do want to just contain the object directly and avoid all the pointer stuff. But there are various reasons why that may not be the ideal approach; reasons that you probably don't need to worry about yet.