c++类里面vector问题

一、C++类里面vector问题

定义一个类Intent

class Intent{

...

}

定义一个类Domain

class Domain{

std::vector<Intent*> intents;

std::vector<Intent*> getIntents();

}

调用getIntents()返回的是Domain里面的intents的拷贝副本,不能直接操作,比如不能getIntents().push_back(new Intent()),因为是副本拷贝,不会存入Domain类的intents里面,需要提供Domain::addIntent()接口。

二、构造函数问题

1.在拷贝构造函数中不要将将要拷贝的值打印出来,打印会出现APR问题,如下:

error: Cannot access memory at /third_party/jsoncpp/src/lib_json/json_value.cpp

2.拷贝构造函数和赋值函数区别

拷贝构造函数是用已经存在的对象初始化另一个对象;

复制构造函数是将已经存在的对象复制给另外一个已经存在的对象。

3.如果不想写拷贝构造函数和赋值函数,又不允许别人使用编译器生成的缺省函数,最简单的方法是将拷贝构造函数和赋值函数声明为私有函数,不用编写代码。如:

Class A {

private:

A(const A& a); // 私有拷贝构造函数

A& operate=(const A& a); // 私有赋值函数

}

4.如果类定义中有指针或引用变量或对象,为了避免潜在错误,最好重载拷贝构造函数和赋值函数

三、构造函数和toMembers问题

当一个类里面存着指针变量b(类型为B)的时候,在构造函数和toMembers函数里面要非常小心,常见的问题有:

1.在构造函数里面new出了B,在toMembers()函数里面也new了一次B,并将new出来的赋值给b

A::A() {

B b = new B();

}

A::toMembers(std::string member) {

Json::Reader reader;

Json::Value root;

if (reader.parse(member, root)) {

if (!root["b"].isNull()) {

B b2 = new B();

b2->toMembers(root["b"]);

b = b2;

}

}

}

A a1 = new A();

a->toMembers();

2.isNull()少了取非判断

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容