I have just switched from Java to C++ and everything is going pretty well so far. The language is kind of hard, but I feel as though I am catching on. I have a question about destructors though, and for this I will supply my current code in hopes that someone could provide some clarification on what and how I should proceed.
I am writing a game in OpenGL and have created Three classes: Vector3D, Dimension3D, and Cuboid. My problem starts like this, my cuboid has an instance of both Vector3D and Dimension3D, which you will soon see. I need to know how (the exact routine) of what happens to my Cuboid class once it is flagged for deletion. Or more precisely, if i need to explicitly destroy both the Vector3D and Dimension3D instance when such an event occurs. I hope I articulated this question adequately enough.
Here are my classes.
(Vector3D.cpp)
#include "Vector3D.h"
Vector3D::Vector3D(){
}
Vector3D::Vector3D( const float& x , const float& y , const float& z ){
    this->x = x;
    this->y = y;
    this->z = z;
}
Vector3D::~Vector3D(){
}
void Vector3D::setX( const float& x ){
    this->x = x;
}
void Vector3D::setY( const float& y ){
    this->y = y;
}
void Vector3D::setZ( const float& z ){
    this->z = z;
}
float Vector3D::getX(){
    return x;
}
float Vector3D::getY(){
    return y;
}
float Vector3D::getZ(){
    return z;
}
(Vector3D.h)
#ifndef NE3_Vector3D_H_
#define NE3_Vector3D_H_
class Vector3D{
public:
    Vector3D();
    Vector3D( const float& , const float& , const float& );
    ~Vector3D();
    void setX( const float& );
    void setY( const float& );
    void setZ( const float& );
    void setPosition( const float& , const float& , const float& );
    float getX();
    float getY();
    float getZ();
    float x;
    float y;
    float z;
private:
    // Private Members Go Here
};
#endif // NE3_Vector3D_H_
(Dimension3D.cpp)
#include "Dimension3D.h"
Dimension3D::Dimension3D(){
}
Dimension3D::Dimension3D( const float& width , const float& height , const float& depth ){
    this->width = width;
    this->height = height;
    this->depth = depth;
}
Dimension3D::~Dimension3D(){
}
void Dimension3D::setWidth( const float& width ){
    this->width = width;
}
void Dimension3D::setHeight( const float& height ){
    this->height = height;
}
void Dimension3D::setDepth( const float& depth ){
    this->depth = depth;
}
float Dimension3D::getWidth(){
    return width;
}
float Dimension3D::getHeight(){
    return height;
}
float Dimension3D::getDepth(){
    return depth;
}
(Dimension3D.h)
#ifndef NE3_Dimension3D_H_
#define NE3_Dimension3D_H_
class Dimension3D{
public:
    Dimension3D();
    Dimension3D( const float& , const float& , const float& );
    ~Dimension3D();
    void setWidth( const float& );
    void setHeight( const float& );
    void setDepth( const float& );
    void setSize( const float& , const float& , const float& );
    float getWidth();
    float getHeight();
    float getDepth();
    float width;
    float height;
    float depth;
private:
    // Private Members Go Here
};
#endif // NE3_Dimension3D_H_
And lastly, my Work in progress Cuboid.cpp and Cuboid.h
(Cuboid.cpp)
#include "Cuboid.h"
Cuboid::Cuboid(){
}
Cuboid::Cuboid(const Vector3D& location, const Dimension3D& dimension){
    this->location = location;
    this->dimension = dimension;
}
Cuboid::~Cuboid(){
    // Do i do delete both location and dimension here?
}
void Cuboid::drawImmediate(){
}
void Cuboid::drawVBO(){
}
(Cuboid.h)
#ifndef NE3_CUBOID_H_
#define NE3_CUBOID_H_
#include "Vector3D.h"
#include "Dimension3D.h"
class Cuboid{
public:
    Cuboid();
    Cuboid( const Vector3D& , const Dimension3D& );
    ~Cuboid();
    void drawImmediate();
    void drawVBO();
    Vector3D location;
    Dimension3D dimension;
private:
};
#endif // NE3_CUBOID_H_
I left a comment in Cuboid.cpp within the destructor. I want to know if I should be deleting the Vector3D and Dimension3D there, and an example showing the best way to do this. IE: Any common conventions that express this functionality.
If my question is not adequate, I will be more than happy to provide further clarification. Also, I am sure that there are other questions like this, however, I need to see it in my own code to fully grasp it. (weird learning style), so please forgive me if this turns into a duplicate.
 
     
     
     
     
     
    