问几个面向对象的c++的内存有关问题

问几个面向对象的c++的内存问题
c++菜鸟 问几个让我纠结的问题
class Test
{
    public:
        vector<int>tst;
        vector<int>*tst1;
}
//上面缺省了很多东西
tst1在.cpp 文件中会 new
1.c++牵扯到对象的时候 例如 我 new Test  Test在堆上 tst1在哪里  tst有在哪里(根据很多东西tst 应该在栈上但是我不觉的)
2.如果 Test 不new 就是一个单独的 对象  Test()应该在 栈上 这个时候  tst1存在哪里(tst1在构造函数中会被new) tst又在哪里
3.对于局部变量(没有new的) 他的生命周期是当前的函数块出了函数就被释放 对于全局变量(没有new)声明周期应该是应用程序的生命周期 程序结束时 释放   那对于成员变量  就像上面的 tst 我原本认为他出了构造函数块就被释放所以不能这么写但是试验了一下 那样写没错 也就是所  成员变量(没有new)生命周期是 test的实例的生命周期 这样立即对吗???
4.vector 这个动态数组  一半的情况用起来简单 但是如果多维的 要如何释放内存
(1)   vector<int>t1;
(2)   vector<int*>t2;
(3)   vector<vector<int>>t3;
(4)   vector<vector<int*>>t4;
(5)   vector<vector<int*>*>t5;
上面的这几种形式 的vector 前2个好理解 (1)因为里面是对象所以当vector结束时会自动析够自己和元素 (2)因为vector 的元素时指针 所以需要手动遍历和释放内部元素  而 后面的多维的vector 让我已经乱掉了 求解

请大牛门 上面的问题应该对一个 有经验的人不难  帮帮小弟啊

------解决方案--------------------
1. tst和tst1都在堆上, 因为他们都是数据. 在栈上的一般是局部变量, 函数参数等
2. 在栈上. 因为tst1是指针, 如果如你所说, "tst1在构造函数中会被new", 那么tst1指向的对象在堆上.
3. 可以这么理解吧...实际上你定义的类或者结构体就像是int类型一些样, 他们的生命周期和对象是一样的.
4. 多维的时候要一层一层释放. (3)不需要手动释放, 不在堆上. (4)需要把里层的释放掉. (5)和(4)差不多, 释放完里层的再释放外层的.