首先,如果我在問題標題中沒有使用正確的術語,我表示歉意。完全有可能。我開始學習C++,並且我會承認我在引用和副本方面遇到了很多困難。在參考下面我的代碼,我有以下問題:問題理解引用和C++中的副本
main.c中,是傳遞給Carrier.add()函數(*吧),參考或的副本說法計劃的對象,我把矢量,或其他東西?
當這個參數被添加到承運人的計劃矢量(在承運人類內)時,是否添加了一個副本?這是如何工作的,因爲我沒有提供拷貝構造函數或者告訴它拷貝?我認爲它是自動生成的?
如果過於籠統,請忽略此項。我想我的主要問題是我想/需要了解它是如何工作的,而這正是我自己試圖找出問題答案的地方。有沒有一種方法可以使Visual Studio在編譯器中以我的實際代碼生成構造函數,因此我可以在調試模式下逐步查看它們,看看它們是如何工作的。現在,當我調試時,我很難說出一個編譯器生成的拷貝構造函數被調用(如果這是所發生的事情)。
這裏是我的代碼:
的main.c
#include "stdafx.h"
#include <iostream>
#include "Plan.h"
#include "Carrier.h"
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<Plan> plans;
for (int i = 0; i < 4; ++i) {
Plan p(i);
plans.push_back(p);
}
Carrier c(5);
for(std::vector<Plan>::iterator it = plans.begin(); it != plans.end(); ++it) {
//my question is about the line directly below this comment
c.add(*it);
}
return 0;
}
Plan.h
#pragma once
class Plan
{
private:
int id;
public:
Plan(int id);
};
Plan.cpp
#include "Plan.h"
Plan::Plan(int i)
{
id = i;
}
Carrier.h
#pragma once
#include <vector>
class Plan;
class Carrier
{
private:
int id;
std::vector<Plan> plans;
public:
Carrier(int i);
void add(Plan p);
};
Carrier.cpp
#include "Carrier.h"
#include "Plan.h"
Carrier::Carrier(int i) {
id = i;
}
void Carrier::add(Plan p) {
plans.push_back(p);
}
非標準的VC++擴展和STL的混合很奇怪... – 2011-04-13 17:38:18
問題標題中的術語是完美的,這是一個很好的措辭問題。 +1。 – 2011-04-13 17:43:36
@Etienne - Ha。是的,我使用的是一本使用stl和gcc的書,但是我在windows上,所以我只是使用visual studio。我應該不使用stl嗎? – oob 2011-04-13 18:25:11