hi Shamlei
I give you my ideas of how make your 'arkanoid' simpler and more efficient ...
You have these objects:
1) player's paddle, 2) ball, 3) boxes, 4) list<> or 'vector' that contains all boxes, 5) game board
What of these objects is who interacts with all of others? The ball
Then it would be better to pass the ball reference to all other objects, instead of passing all other objects' references to the ball
At the main loop, you need to draw the board, the alive boxes, the paddle, and the ball
The 'vector' should check, iterating, if the ball hits any of its boxes and destroy it. If so, then it should make the ball bounce, mark himself as destroyed, and break the iteration (cos maybe the ball hits 2 boxes, and I suppose it should not destroy 2 boxes at a same time) ... after this, if there is a marked box, it should be removed from the 'vector'. If the 'vector' is empty, then you pass the level.
Also, the paddle should check if the ball bounce on it. If so, it should calculate, depending on what part of it the ball bounced, the new direction (angle) of the ball (this alghoritm may be a bit sophisticated).
The board should check if the ball collides against its borders. If so, it should bounce (if I'm not wrong the new angle would be : angle = 90 - angle ... if needed then I try to confirm). If the ball reaches the board's bottom, then you lose a life (the paddle explodes or whatever you want).
Additionally, you may want to have some ways to load levels, such as int (or short) bidimensional vectors or arrays to store the boxes in memory. Also you can have boxes with different attributes, as color, hits to destroy it, bonus it throws down when destroyed, ...
Please let me know your project's progress and if you need any help