[英]How to use Struct with a *variable name?
private:
// data containing character strings
// shared by Strings when copying/assigning
struct SharedData
{
char *data; // 0-terminated char array
size_t n; // number of non-0 characters in string
size_t count; // reference count, how many Strings share this object?
};
SharedData *shared; //here i don't understand how to use.
如何使用n?
我只是這樣做嗎
shared -> n = 3;
我不斷出現細分錯誤,所以我不知道自己在做什么。 我想獲取一個字符串的長度,然后將其傳遞給n進行存儲
您的類包含一個指向 SharedData的指針 。 您需要使指針指向某物,大概是通過這樣做
shared = new SharedData();
shared->n = 3;
// etc.
共享內部的數據也是如此
shared->data = new char[100];
strcpy(shared->data, ...);
如果您還沒有很好地掌握指針,我感覺這對您來說將是一項艱巨的練習。
您應該先分配一些內存:
SharedData *shared = new SharedData;
shared->n = 3;
最好使用這樣的東西:
struct SharedData {
SharedData(size_t Capacity) : data(0), capacity(Capacity), length(0), count(1) {
data = new char[capacity];
}
~SharedData() {
if (--count <= 0) delete [] data;
}
char *data; // 0-terminated char array
size_t length; // number of non-0 characters in string
size_t capacity;
size_t count; // reference count, how many Strings share this object?
};
SharedData* shared = new SharedData(1000);
編輯:當然,這個簡短的示例缺少復制構造函數,並且無法以適當的方式處理引用計數。 但這不是此答案的主題。
修改內存中的未分配點是未定義的行為。
您必須為shared
分配內存或將其設置為有效地址。
class Class
{
private:
SharedData *shared;
...
public:
Class() : shared(new SharedData()) {}
~Class() { delete shared; }
void doSomething() { shared->n = 3; }
};
當可以使用智能指針時,請盡量不要使用裸指針:
class Class
{
private:
std::unique_ptr<SharedData> shared;
or
std::shared_ptr<SharedData> shared;
...
public:
Class() : shared(new SharedData()) {}
void doSomething() { shared->n = 3; }
};
您正在使用C ++ 11編譯器嗎? 您為什么不輕松一點?
struct SharedData
{
std::string data;
size_t count; // reference count, how many Strings share this object?
};
std::shared_ptr<SharedData> shared = std::make_shared<SharedData>();
如果您不需要實際的引薦來源人數計數,您只想知道是否有人在引用您的數據,只需使用std::shared_ptr<std::string>
。 當所有引用消失時,它將跟蹤引用並銷毀字符串對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.