CT 2024.12에서 클래스 코드를 활용하여 std::shared_ptr를 생성할 수 있습니다. 생성하는 순서는 다음과 같습니다.

  1. 클래스 코드로 포인터 객체 만들기
  2. 1.에서 만든 포인터 객체로 std::shared_ptr 객체 만들기

예제

#include <iostream>
#include <vector>
#include <memory>
using namespace std;
class Animal {
public:
    // Pure virtual function
    virtual void speak() const = 0;
    virtual ~Animal() {}
};
class Dog : public Animal {
public:
    void speak() const override {
        std::cout << "Woof!" << std::endl;
    }
};
class Cat : public Animal {
public:
    void speak() const override {
        std::cout << "Meow!" << std::endl;
    }
};
class AnimalShelter {
public:
    ~AnimalShelter() {
    }
    void addAnimal(std::shared_ptr<Animal> animal) {
    	animal->speak();
        animals.push_back(animal.get());
    }
    void makeAllSpeak() const {
        for (size_t i = 0; i < animals.size(); ++i) {
            animals[i]->speak();
        }
    }
    void makeAnomyAnimal() {
        std::shared_ptr<Animal> a = std::make_shared<Cat>();
        a->speak();
    }
private:
    std::vector<Animal*> animals;
};
int main() {
	AnimalShelter shelter;
	shelter.makeAnomyAnimal();
    return 0;
}

[사용자 코드]에서 사용하기

addAnimal의 테스트 코드는 std::shared_ptr 객체 생성이 제대로 되지 않아 시그널 오류가 발생하고 있습니다.

  1. [클래스 팩토리 뷰]에서 Animal 클래스에 대한 클래스 팩토리 코드를 생성합니다.
    • [클래스 팩토리 뷰]에서 클래스 코드를 확인하면 cs_create_XXXX 형태의 함수를 확인할 수 있습니다. 이 함수 앞에 CS_FACTORY를 붙여 클래스 객체를 생성하여 사용할 수 있습니다. 예시: Animal* animal = CS_FACTORY cs_create_classcode_std_cpp_Animal();
  2. 1.의 Animal *를 std::shared_ptr객체로 변환합니다.

[스텁]에서 사용하기

  1. [클래스 팩토리 뷰]에서 Cat 클래스에 대한 클래스 팩토리 코드를 생성합니다.
  2. main 테스트에 연결된 makeAnomyAnimal 스텁을 [스텁 뷰]에서 엽니다.
  3. Cat* 객체를 1.의 클래스 코드 함수를 이용하여 만듭니다.
  4. 3.의 Cat* 객체를 std::shared_ptr로 변환합니다.

Need more help with this?
Don’t hesitate to contact us here.

Thanks for your feedback.