X

曜彤.手记

随手写写,关于互联网技术、产品与创业

GeekBank C++ 线下班学习心得(二)


今天是“GeekBand 极客班线下 C++ 培训的第二周课程”,浦东12路依旧挤得不行。上午先是产品经理部分的课程答疑与培训,一些课程重点的总结如下:

产品经理必读书:

产品经验总结:

  1. 策划产品时要对产品面向的用户群体进行细分(必须进行量化),不能使用模糊的群体分类(比如极客),要有明确的定位,并在生活中可以找到实例;
  2. 表达能力重要性和逻辑推理的重要性;
  3. 从创意去思考背后的问题,%99用户的主意都是无用的;
  4. 走出办公楼,去面对自己的用户;

“IOS 应用开发与实战”课总结:

  1. 写代码:代码整体的干净程度,像说明文,易于后来人接手,代码的优美;
  2. 不要去死记硬背,写得多自然就记住了;

“C++辅导课培训”总结:

栈:

堆:

避免悬浮指针:

MyClass *func() {
    MyClass c(10);
    return &c;
}

栈是属于函数的:指向栈对象的指针比较危险:

MyClass func() {
    MyClass c(10);
    AClass a(100);
    c.pa = $a;
    return c;
}

返回值尽量不要反悔指针,谁分配内存谁释放内存:

MyClass *func() {
    MyClass * pa = new MyClass();
    return pa;
}
MyClass *p = func();

C++ 变量模型与使用:

传参:

// 传对象不好,对象较大,只要传参就是拷贝;
void func1(MyClass c) {
    // 这里 “c” 的大小依赖于各个字段的大小,32位机器若有虚函数加 4byte,64位则加 8byte;
}
void func2(MyClass *pc) {
    // 尽量不用,不能 delete 栈对象;
}

后续删除指针:

MyClass *pc = new MyClass();
func2(pc);
delete(pc);
void func3(MyClass &mc) {
    // 传参成本低,效率高,背后是指针,不用考虑是栈对象还是堆对象;
}
void func3(MyClass &mc) {
    // 若 “mc” 是堆对象,则函数没问题,但 “mc” 是外部参数,函数不负责释放;
    MyClass *p = &mc;
    delete p;
}
// ByValue 的替代,传 const 引用;
void func3(const MyClass &mc) {}

传参:

MyClass c1func1(c1);
func2(&c1);
func3(c1);    

返回值:

MyClass func1() {
    MyClass c1;
    return c1;

    MyClass* pc2 = new MyClass();
    return *pc2;
    // 返回对象常见;
    // 这里 “pc2” 指针不会被释放;
}

MyClass *func2() {
    MyClass c1;
    return &c1;
    // OR;
    MyClass *pc2 = new MyClass();
    return pc2;
    // 只能返回堆对象的指针;
}

MyClass& func4(MyClass &c) {
    return c;
}    

总结:



这是文章底线,下面是评论
  暂无评论,欢迎勾搭 :)